java數(shù)據(jù)結(jié)構(gòu)和算法中數(shù)組的簡單入門
一直都對這一塊沒有什么想法,加上不怎么理解,只是懂個大概;最近突然感覺對數(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)就是下面這些,我們一個一個的慢慢看(瑪?shù)?,好多。。。?/p>
1.數(shù)組的基本用法
對于數(shù)組應(yīng)該很熟悉了,最開始學(xué)完java八種基本類型之后下一個就是學(xué)的數(shù)組,數(shù)組最大的特點(diǎn)就是除了Object數(shù)組之外,其他的數(shù)組只能存放同一種數(shù)據(jù)類型,而且我們一開始指定數(shù)組就要指定確定的長度,一旦插入的數(shù)據(jù)超過這個長度,就會報錯,其實(shí)就是因?yàn)閿?shù)組的缺點(diǎn)太大,于是就根據(jù)數(shù)組的基礎(chǔ)設(shè)計出來了集合,集合后面說。。
兩種用法,以O(shè)bject數(shù)組為例,這個數(shù)組可以隨意放什么東西,然后用Arrays.toString(xxx)可以打印數(shù)組中的所有元素;
任何數(shù)據(jù)類型都有與之對應(yīng)的數(shù)組,比如int[],String[],boolean[]等等
2.簡單實(shí)現(xiàn)對數(shù)組的增刪改查
·用數(shù)組的比較麻煩,還要一個一個慢慢賦值,對我們操作數(shù)據(jù)也不是很方便,那我們就隨意實(shí)現(xiàn)一下我們自己的數(shù)組最簡單的增刪改查吧!
package com.wyq.thread; public class MyArray { private int[] arr; //數(shù)組中當(dāng)前存有數(shù)據(jù)的個數(shù),也叫做數(shù)組的有效長度 private int eles; //數(shù)組中可容納最大的數(shù)量 private int length; //注意這兩個構(gòu)造器,在無參構(gòu)造中調(diào)用有參構(gòu)造并設(shè)置默認(rèn)的數(shù)組長度 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ù)操作還是會繼續(xù) //這里就沒怎么考慮給這個數(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ù)組中查有沒有一個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ù),這里會進(jìn)行很多的判斷,可以說這個方法是數(shù)組中最麻煩的方法了 //1.先調(diào)用查詢方法看數(shù)組中有沒有我們要刪除的數(shù)據(jù),沒有直接返回-1,有的話就進(jìn)入第二步 //2.如果這個要刪除的數(shù)據(jù)在數(shù)組最后,那就直接將數(shù)組有效長度減一即可,如果不在最后,進(jìn)入第三步 //3.一個數(shù)組要刪除中間的個位置,不可能直接將這個數(shù)據(jù)復(fù)制為0或者null,我們只需要把這個位置的后面所有數(shù)據(jù)都向前 // 移動一個位置即可,這時數(shù)組的最后一個位置就空出來了,我們再把數(shù)組的有效長度減一就行了 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)用查詢方法找到這個數(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ù)組長度,就會用默認(rèn)的10 MyArray array = new MyArray(); for (int i = 0; i < 10; i++) { array.add(i); } //注意,此時由于數(shù)組滿了我們還添加數(shù)據(jù),就會報異常 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)的這個最簡單的數(shù)組有沒有跟集合有點(diǎn)類似啊,就是那個ArrayList,去看看源碼你會發(fā)現(xiàn)我們這個就是最丑陋版的ArrayList,哈哈哈!只是實(shí)現(xià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ù)組知識總結(jié)
- 詳解Java數(shù)據(jù)結(jié)構(gòu)和算法(有序數(shù)組和二分查找)
- Java數(shù)據(jù)結(jié)構(gòu)之?dāng)?shù)組(動力節(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)常會與第三方公司進(jìn)行合作,接入第三方接口,文中給出了詳細(xì)的代碼實(shí)例,需要的朋友可以參考下2023-08-08Java動態(tài)修改配置即時生效的方式WatchService
這篇文章給大家分享了Java動態(tài)修改配置即時生效的方式WatchService的相關(guān)知識點(diǎn)內(nèi)容,有興趣的朋友可以參考學(xué)習(xí)下。2018-06-06Java中StringUtils工具類進(jìn)行String為空的判斷解析
這篇文章主要介紹了Java中StringUtils工具類進(jìn)行String為空的判斷解析,具有一定借鑒價值,需要的朋友可以參考下2018-01-01詳解如何用spring Restdocs創(chuàng)建API文檔
這篇文章將帶你了解如何用spring官方推薦的restdoc去生成api文檔。具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05SpringBoot操作mongo實(shí)現(xiàn)方法解析
這篇文章主要介紹了SpringBoot操作mongo實(shí)現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-08-08Nacos+Spring Cloud Gateway動態(tài)路由配置實(shí)現(xiàn)步驟
Nacos最近項(xiàng)目一直在使用,本文通過gateway、nacos-consumer、nacos-provider三個簡單模塊來展示:Nacos下動態(tài)路由配置,,感興趣的小伙伴們可以參考一下2021-08-08