java數(shù)據(jù)結(jié)構(gòu)和算法中數(shù)組的簡(jiǎn)單入門
一直都對(duì)這一塊沒有什么想法,加上不怎么理解,只是懂個(gè)大概;最近突然感覺對(duì)數(shù)據(jù)結(jié)構(gòu)和算法這塊有點(diǎn)兒興趣,決定還是盡量詳細(xì)的看看這些結(jié)構(gòu)和算法;
話說什么事數(shù)據(jù)結(jié)構(gòu)和算法呢?現(xiàn)在我也說不上來,等我學(xué)的差不多了再來總結(jié)吧!
我隨意借了一張圖,所謂的數(shù)據(jù)結(jié)構(gòu)就是下面這些,我們一個(gè)一個(gè)的慢慢看(瑪?shù)?,好多。。。?/p>

1.數(shù)組的基本用法
對(duì)于數(shù)組應(yīng)該很熟悉了,最開始學(xué)完java八種基本類型之后下一個(gè)就是學(xué)的數(shù)組,數(shù)組最大的特點(diǎn)就是除了Object數(shù)組之外,其他的數(shù)組只能存放同一種數(shù)據(jù)類型,而且我們一開始指定數(shù)組就要指定確定的長(zhǎng)度,一旦插入的數(shù)據(jù)超過這個(gè)長(zhǎng)度,就會(huì)報(bào)錯(cuò),其實(shí)就是因?yàn)閿?shù)組的缺點(diǎn)太大,于是就根據(jù)數(shù)組的基礎(chǔ)設(shè)計(jì)出來了集合,集合后面說。。
兩種用法,以O(shè)bject數(shù)組為例,這個(gè)數(shù)組可以隨意放什么東西,然后用Arrays.toString(xxx)可以打印數(shù)組中的所有元素;

任何數(shù)據(jù)類型都有與之對(duì)應(yīng)的數(shù)組,比如int[],String[],boolean[]等等
2.簡(jiǎn)單實(shí)現(xiàn)對(duì)數(shù)組的增刪改查
·用數(shù)組的比較麻煩,還要一個(gè)一個(gè)慢慢賦值,對(duì)我們操作數(shù)據(jù)也不是很方便,那我們就隨意實(shí)現(xiàn)一下我們自己的數(shù)組最簡(jiǎn)單的增刪改查吧!
package com.wyq.thread;
public class MyArray {
private int[] arr;
//數(shù)組中當(dāng)前存有數(shù)據(jù)的個(gè)數(shù),也叫做數(shù)組的有效長(zhǎng)度
private int eles;
//數(shù)組中可容納最大的數(shù)量
private int length;
//注意這兩個(gè)構(gòu)造器,在無參構(gòu)造中調(diào)用有參構(gòu)造并設(shè)置默認(rèn)的數(shù)組長(zhǎng)度
public MyArray() {
this(10);
}
public MyArray(int length){
eles = 0;
this.length = length;
arr = new int[length];
}
//獲取當(dāng)前數(shù)組存的實(shí)際數(shù)據(jù)的數(shù)量
public int size(){
return eles;
}
//展示當(dāng)前數(shù)組中的數(shù)據(jù)
public void show(){
System.out.print("數(shù)組中所有的數(shù)分別為:");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
}
//向數(shù)組中添加數(shù)據(jù)
public boolean add(int num){
//假如當(dāng)前數(shù)組已經(jīng)滿了還往里面添加數(shù)據(jù),那就拋出異常并返回false,后續(xù)操作還是會(huì)繼續(xù)
//這里就沒怎么考慮給這個(gè)數(shù)組擴(kuò)容
if (length==eles) {
try {
throw new Exception("不好意思,數(shù)組已經(jīng)滿了,你還是別存了!");
} catch (Exception e) {
e.printStackTrace();
}
return false;
}else{
arr[eles] = num;
eles++;
return true;
}
}
//在數(shù)組中查有沒有一個(gè)xxx數(shù)據(jù),有就返回其索引值,沒有的話就返回null,其實(shí)也可以捕捉異常,可以自己試試
public Integer find(int value){
if (arr!=null) {
for (int i = 0; i < arr.length; i++) {
if (arr[i]==value) {
return i;
}
}
}
return null;
}
//刪除數(shù)組中的xx數(shù)據(jù),這里會(huì)進(jìn)行很多的判斷,可以說這個(gè)方法是數(shù)組中最麻煩的方法了
//1.先調(diào)用查詢方法看數(shù)組中有沒有我們要?jiǎng)h除的數(shù)據(jù),沒有直接返回-1,有的話就進(jìn)入第二步
//2.如果這個(gè)要?jiǎng)h除的數(shù)據(jù)在數(shù)組最后,那就直接將數(shù)組有效長(zhǎng)度減一即可,如果不在最后,進(jìn)入第三步
//3.一個(gè)數(shù)組要?jiǎng)h除中間的個(gè)位置,不可能直接將這個(gè)數(shù)據(jù)復(fù)制為0或者null,我們只需要把這個(gè)位置的后面所有數(shù)據(jù)都向前
// 移動(dòng)一個(gè)位置即可,這時(shí)數(shù)組的最后一個(gè)位置就空出來了,我們?cè)侔褦?shù)組的有效長(zhǎng)度減一就行了
public int delete(int value){
Integer find = find(value);
if (find!=null) {
if (find==eles-1) {
eles--;
}else{
for (int i = find; i < arr.length-1; i++) {
if (arr[i]==value) {
arr[i]=arr[i+1];
}
}
eles--;
}
}
return -1;
}
//更新數(shù)據(jù),先調(diào)用查詢方法找到這個(gè)數(shù)據(jù)所在位置,然后直接賦值即可
public boolean update(int index,int value){
Integer find = find(index);
if (find!=null) {
arr[index]=value;
return true;
}
return false;
}
public static void main(String[] args) {
//由于沒有指定數(shù)組長(zhǎng)度,就會(huì)用默認(rèn)的10
MyArray array = new MyArray();
for (int i = 0; i < 10; i++) {
array.add(i);
}
//注意,此時(shí)由于數(shù)組滿了我們還添加數(shù)據(jù),就會(huì)報(bào)異常
array.add(222);
array.show();
array.delete(5);
System.out.println("刪除數(shù)據(jù)后數(shù)組的實(shí)際大?。?+array.size());
array.add(100);
array.update(0, 10);
array.find(9);
array.show();
}
}

不知道大家有沒有發(fā)現(xiàn),我們實(shí)現(xiàn)的這個(gè)最簡(jiǎn)單的數(shù)組有沒有跟集合有點(diǎn)類似啊,就是那個(gè)ArrayList,去看看源碼你會(huì)發(fā)現(xiàn)我們這個(gè)就是最丑陋版的ArrayList,哈哈哈!只是實(shí)現(xiàn)了最簡(jiǎn)單的功能!
- 帶你了解Java數(shù)據(jù)結(jié)構(gòu)和算法之?dāng)?shù)組
- Java數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)二維數(shù)組與稀疏數(shù)組轉(zhuǎn)換詳解
- Java數(shù)據(jù)結(jié)構(gòu)與算法之稀疏數(shù)組與隊(duì)列深入理解
- java數(shù)據(jù)結(jié)構(gòu)基礎(chǔ):稀疏數(shù)組
- 淺談Java數(shù)據(jù)結(jié)構(gòu)之稀疏數(shù)組知識(shí)總結(jié)
- 詳解Java數(shù)據(jù)結(jié)構(gòu)和算法(有序數(shù)組和二分查找)
- Java數(shù)據(jù)結(jié)構(gòu)之?dāng)?shù)組(動(dòng)力節(jié)點(diǎn)之Java學(xué)院整理)
- java數(shù)據(jù)結(jié)構(gòu)與算法之雙向循環(huán)隊(duì)列的數(shù)組實(shí)現(xiàn)方法
- Java?數(shù)據(jù)結(jié)構(gòu)與算法系列精講之?dāng)?shù)組
相關(guān)文章
Java調(diào)用第三方http接口的四種方式總結(jié)
這篇文章主要給大家介紹了關(guān)于Java調(diào)用第三方http接口的四種方式,在實(shí)際開發(fā)中我們經(jīng)常會(huì)與第三方公司進(jìn)行合作,接入第三方接口,文中給出了詳細(xì)的代碼實(shí)例,需要的朋友可以參考下2023-08-08
Java動(dòng)態(tài)修改配置即時(shí)生效的方式WatchService
這篇文章給大家分享了Java動(dòng)態(tài)修改配置即時(shí)生效的方式WatchService的相關(guān)知識(shí)點(diǎn)內(nèi)容,有興趣的朋友可以參考學(xué)習(xí)下。2018-06-06
Java中StringUtils工具類進(jìn)行String為空的判斷解析
這篇文章主要介紹了Java中StringUtils工具類進(jìn)行String為空的判斷解析,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01
詳解如何用spring Restdocs創(chuàng)建API文檔
這篇文章將帶你了解如何用spring官方推薦的restdoc去生成api文檔。具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
SpringBoot操作mongo實(shí)現(xiàn)方法解析
這篇文章主要介紹了SpringBoot操作mongo實(shí)現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
Nacos+Spring Cloud Gateway動(dòng)態(tài)路由配置實(shí)現(xiàn)步驟
Nacos最近項(xiàng)目一直在使用,本文通過gateway、nacos-consumer、nacos-provider三個(gè)簡(jiǎn)單模塊來展示:Nacos下動(dòng)態(tài)路由配置,,感興趣的小伙伴們可以參考一下2021-08-08

