0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

java中幾種常用數(shù)據(jù)結(jié)構(gòu)

倩倩 ? 來(lái)源:網(wǎng)絡(luò)整理 ? 2018-02-08 16:12 ? 次閱讀

java 中幾種常用數(shù)據(jù)結(jié)構(gòu)

Java中有幾種常用的數(shù)據(jù)結(jié)構(gòu),主要分為Collection和map兩個(gè)主要接口(接口只提供方法,并不提供實(shí)現(xiàn)),而程序中最終使用的數(shù)據(jù)結(jié)構(gòu)是繼承自這些接口的數(shù)據(jù)結(jié)構(gòu)類(lèi)。

一、幾個(gè)常用類(lèi)的區(qū)別

1.ArrayList: 元素單個(gè),效率高,多用于查詢

2.Vector: 元素單個(gè),線程安全,多用于查詢

3.LinkedList:元素單個(gè),多用于插入和刪除

4.HashMap: 元素成對(duì),元素可為空

5.HashTable: 元素成對(duì),線程安全,元素不可為空

二、Vector、ArrayList和LinkedList

大多數(shù)情況下,從性能上來(lái)說(shuō)ArrayList最好,但是當(dāng)集合內(nèi)的元素需要頻繁插入、刪除時(shí)LinkedList會(huì)有比較好的表現(xiàn),但是它們?nèi)齻€(gè)性能都比不上數(shù)組,另外Vector是線程同步的。所以:

如果能用數(shù)組的時(shí)候(元素類(lèi)型固定,數(shù)組長(zhǎng)度固定),請(qǐng)盡量使用數(shù)組來(lái)代替List;

如果沒(méi)有頻繁的刪除插入操作,又不用考慮多線程問(wèn)題,優(yōu)先選擇ArrayList;

如果在多線程條件下使用,可以考慮Vector;

如果需要頻繁地刪除插入,LinkedList就有了用武之地;

如果你什么都不知道,用ArrayList沒(méi)錯(cuò)。

三、Collections和Arrays

在Java集合類(lèi)框架里有兩個(gè)類(lèi)叫做Collections(注意,不是Collection!)和Arrays,這是JCF里面功能強(qiáng)大的工具,但初學(xué)者往往會(huì)忽視。按JCF文檔的說(shuō)法,這兩個(gè)類(lèi)提供了封裝器實(shí)現(xiàn)(Wrapper Implementations)、數(shù)據(jù)結(jié)構(gòu)算法和數(shù)組相關(guān)的應(yīng)用。

想必大家不會(huì)忘記上面談到的“折半查找”、“排序”等經(jīng)典算法吧,Collections類(lèi)提供了豐富的靜態(tài)方法幫助我們輕松完成這些在數(shù)據(jù)結(jié)構(gòu)課上煩人的工作:

binarySearch:折半查找。

sort:排序,這里是一種類(lèi)似于快速排序的方法,效率仍然是O(n * log n),但卻是一種穩(wěn)定的排序方法。

reverse:將線性表進(jìn)行逆序操作,這個(gè)可是從前數(shù)據(jù)結(jié)構(gòu)的經(jīng)典考題哦!

rotate:以某個(gè)元素為軸心將線性表“旋轉(zhuǎn)”。

swap:交換一個(gè)線性表中兩個(gè)元素的位置。

……

Collections還有一個(gè)重要功能就是“封裝器”(Wrapper),它提供了一些方法可以把一個(gè)集合轉(zhuǎn)換成一個(gè)特殊的集合,如下:

unmodifiableXXX:轉(zhuǎn)換成只讀集合,這里XXX代表六種基本集合接口:Collection、List、Map、Set、SortedMap和SortedSet。如果你對(duì)只讀集合進(jìn)行插入刪除操作,將會(huì)拋出UnsupportedOperationException異常。

synchronizedXXX:轉(zhuǎn)換成同步集合。

singleton:創(chuàng)建一個(gè)僅有一個(gè)元素的集合,這里singleton生成的是單元素Set,

singletonList和singletonMap分別生成單元素的List和Map。

空集:由Collections的靜態(tài)屬性EMPTY_SET、EMPTY_LIST和EMPTY_MAP表示。

java中幾種常用數(shù)據(jù)結(jié)構(gòu)

java中幾種常用數(shù)據(jù)結(jié)構(gòu)

數(shù)據(jù)結(jié)構(gòu):

一。鏈表

1.鏈表與數(shù)組的區(qū)別

數(shù)組在使用之前必須定義大小,而且不能動(dòng)態(tài)定義大小,會(huì)造成給數(shù)組分配了太多的單元而浪費(fèi)了寶貴的資源,糟糕的一面是,程序運(yùn)行時(shí)需要處理的數(shù)據(jù)可能多于數(shù)組的單元。

當(dāng)需要?jiǎng)討B(tài)的減少或增加數(shù)據(jù)項(xiàng)時(shí),可以使用鏈表這種數(shù)據(jù)結(jié)構(gòu)。

2.java中用到鏈表舉例

LinkedList linkedList = new LinkedList();

創(chuàng)建一個(gè)空鏈表,然后linkedList 鏈表可以使用add()方法向這個(gè)鏈表依次增加節(jié)點(diǎn)。例如:

linkedList.add(“I”);

linkedList.add(“Iove”);

linkedList.add(“it”);

linkedList.add(“so”);

linkedList.add(“much”);

linkedList可以使用方法public Object get(index i)獲取第i個(gè)節(jié)點(diǎn)存儲(chǔ)的數(shù)據(jù)。

二。散列表(哈希表)

1.為什么使用散列表?

對(duì)于數(shù)組和鏈表這兩種數(shù)據(jù)結(jié)構(gòu),如果要查找它們存儲(chǔ)的某個(gè)特定元素卻不知道它的位置,就需要從頭開(kāi)始訪問(wèn)元素直到找到匹配的為止;如果數(shù)據(jù)結(jié)構(gòu)中包含很多的元素,就會(huì)浪費(fèi)時(shí)間。這時(shí)最好使用散列表來(lái)存儲(chǔ)要查找的數(shù)據(jù)。

JAVA里幾種數(shù)據(jù)結(jié)構(gòu)的優(yōu)點(diǎn)和缺點(diǎn)

一般大家都知道ArrayList和LinkedList的大致區(qū)別:

1.ArrayList是實(shí)現(xiàn)了基于動(dòng)態(tài)數(shù)組的數(shù)據(jù)結(jié)構(gòu),LinkedList基于鏈表的數(shù)據(jù)結(jié)構(gòu)。

2.對(duì)于隨機(jī)訪問(wèn)get和set,ArrayList覺(jué)得優(yōu)于LinkedList,因?yàn)長(zhǎng)inkedList要移動(dòng)指針。

3.對(duì)于新增和刪除操作add和remove,LinedList比較占優(yōu)勢(shì),因?yàn)锳rrayList要移動(dòng)數(shù)據(jù)。

這一點(diǎn)要看實(shí)際情況的。若只對(duì)單條數(shù)據(jù)插入或刪除,ArrayList的速度反而優(yōu)于LinkedList。但若是批量隨機(jī)的插入刪除數(shù)據(jù),LinkedList的速度大大優(yōu)于ArrayList. 因?yàn)锳rrayList每插入一條數(shù)據(jù),要移動(dòng)插入點(diǎn)及之后的所有數(shù)據(jù)。

4.查找操作indexOf,lastIndexOf,contains等,兩者差不多。

5.隨機(jī)查找指定節(jié)點(diǎn)的操作get,ArrayList速度要快于LinkedList.

Set是最簡(jiǎn)單的一種集合。集合中的對(duì)象不按特定的方式排序,并且沒(méi)有重復(fù)對(duì)象。 Set接口主要實(shí)現(xiàn)了兩個(gè)實(shí)現(xiàn)類(lèi):

HashSet: HashSet類(lèi)按照哈希算法來(lái)存取集合中的對(duì)象,存取速度比較快

TreeSet :TreeSet類(lèi)實(shí)現(xiàn)了SortedSet接口,能夠?qū)现械膶?duì)象進(jìn)行排序。

Set 的用法:存放的是對(duì)象的引用,沒(méi)有重復(fù)對(duì)象

List的特征是其元素以線性方式存儲(chǔ),集合中可以存放重復(fù)對(duì)象。

List接口主要實(shí)現(xiàn)類(lèi)包括:

ArrayList() : 代表長(zhǎng)度可以改變得數(shù)組??梢詫?duì)元素進(jìn)行隨機(jī)的訪問(wèn),向ArrayList()中插入與刪除元素的速度慢。

LinkedList(): 在實(shí)現(xiàn)中采用鏈表數(shù)據(jù)結(jié)構(gòu)。插入和刪除速度快,訪問(wèn)速度慢。

對(duì)于List的隨機(jī)訪問(wèn)來(lái)說(shuō),就是只隨機(jī)來(lái)檢索位于特定位置的元素。 List 的 get(int index) 方法放回集合中由參數(shù)index指定的索引位置的對(duì)象,下標(biāo)從“0” 開(kāi)始。最基本的兩種檢索集合中的所有對(duì)象的方法。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2946

    瀏覽量

    104364
  • 數(shù)據(jù)結(jié)構(gòu)

    關(guān)注

    3

    文章

    569

    瀏覽量

    40063
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    盤(pán)點(diǎn)幾種常見(jiàn)的數(shù)據(jù)結(jié)構(gòu)

    這里主要總結(jié)下在工作中常碰到的幾種數(shù)據(jù)結(jié)構(gòu):Array,ArrayList,List,LinkedList,Queue,Stack,Dictionary。
    的頭像 發(fā)表于 05-13 15:58 ?5972次閱讀
    盤(pán)點(diǎn)<b class='flag-5'>幾種</b>常見(jiàn)的<b class='flag-5'>數(shù)據(jù)結(jié)構(gòu)</b>

    數(shù)據(jù)結(jié)構(gòu)與算法分析(Java版)(pdf)

    數(shù)據(jù)結(jié)構(gòu)與算法分析(Java版)(pdf)http://www.ibeifeng.com/read.php?tid=4812&u=73481【中文】Java數(shù)據(jù)結(jié)構(gòu)和算法中文第
    發(fā)表于 12-20 21:22

    數(shù)據(jù)結(jié)構(gòu)的幾個(gè)重要知識(shí)點(diǎn)

    希望所招入的技術(shù)人員能夠面向數(shù)據(jù)和邏輯,這對(duì)于整個(gè)軟件架構(gòu)來(lái)說(shuō)很重要,而不僅僅是把一段代碼寫(xiě)好。數(shù)據(jù)結(jié)構(gòu)是指相互之間存在著一種或多種關(guān)系的數(shù)據(jù)元素的集合和該集合
    發(fā)表于 02-27 15:01

    常見(jiàn)的數(shù)據(jù)結(jié)構(gòu)

    的,那樣對(duì)于數(shù)據(jù)的使用簡(jiǎn)直是個(gè)悲劇。針對(duì)此類(lèi)數(shù)據(jù),數(shù)據(jù)結(jié)構(gòu)提供了圖存儲(chǔ)結(jié)構(gòu),專門(mén)用于存儲(chǔ)這類(lèi)數(shù)據(jù)。二、數(shù)
    發(fā)表于 05-10 07:58

    java有哪幾種數(shù)據(jù)結(jié)構(gòu)?

    java單鏈表結(jié)構(gòu)介紹java結(jié)構(gòu)介紹java隊(duì)列結(jié)構(gòu)介紹
    發(fā)表于 11-05 07:01

    現(xiàn)代計(jì)算機(jī)常用數(shù)據(jù)結(jié)構(gòu)和算法

    本書(shū)對(duì)現(xiàn)代計(jì)算機(jī)常用數(shù)據(jù)結(jié)構(gòu)和算法進(jìn)行全面而深入的介紹,系統(tǒng)地介紹了常用數(shù)據(jù)結(jié)構(gòu)和計(jì)算機(jī)算法,精心設(shè)計(jì)和安排了全書(shū)內(nèi)容,適用于各類(lèi)層次的讀者。本書(shū)的每一章
    發(fā)表于 10-24 12:36 ?0次下載

    數(shù)據(jù)結(jié)構(gòu)在游戲編寫(xiě)的應(yīng)用

    在游戲的編寫(xiě),不可避免的出現(xiàn)很多應(yīng)用數(shù)據(jù)結(jié)構(gòu)的地方,有些簡(jiǎn)單的游戲,只是由幾個(gè) 數(shù)據(jù)結(jié)構(gòu) 的組合,所以說(shuō),數(shù)據(jù)結(jié)構(gòu)在游戲編程扮演著很重要
    發(fā)表于 07-25 16:26 ?0次下載

    數(shù)據(jù)結(jié)構(gòu)Java版)

    數(shù)據(jù)結(jié)構(gòu)Java版),個(gè)人收集整理了很久的資料,大家根據(jù)自己情況,有選擇性的下載吧~
    發(fā)表于 10-27 14:08 ?0次下載

    java數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)

    數(shù)據(jù)結(jié)構(gòu)是對(duì)計(jì)算機(jī)內(nèi)存數(shù)據(jù)的一種安排,數(shù)據(jù)結(jié)構(gòu)包括 數(shù)組, 鏈表, 棧, 二叉樹(shù), 哈希表等,算法則對(duì)對(duì)這些結(jié)構(gòu)
    發(fā)表于 11-29 09:46 ?749次閱讀

    什么是數(shù)據(jù)結(jié)構(gòu)?為什么要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)的應(yīng)用實(shí)例分析

    本文檔的主要內(nèi)容詳細(xì)介紹的是什么是數(shù)據(jù)結(jié)構(gòu)?為什么要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)?數(shù)據(jù)結(jié)構(gòu)的應(yīng)用實(shí)例分析包括了:數(shù)據(jù)結(jié)構(gòu)在串口通信當(dāng)中的應(yīng)用,數(shù)據(jù)結(jié)構(gòu)在按鍵
    發(fā)表于 09-26 15:45 ?14次下載
    什么是<b class='flag-5'>數(shù)據(jù)結(jié)構(gòu)</b>?為什么要學(xué)習(xí)<b class='flag-5'>數(shù)據(jù)結(jié)構(gòu)</b>?<b class='flag-5'>數(shù)據(jù)結(jié)構(gòu)</b>的應(yīng)用實(shí)例分析

    java常見(jiàn)數(shù)據(jù)結(jié)構(gòu)面試

    Java面試過(guò)程,經(jīng)常會(huì)被問(wèn)到數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的知識(shí)。對(duì)于工作多年的程序員來(lái)說(shuō),這些理論的知識(shí)可能已經(jīng)忘得差不多了吧,所以面試前還是有必要臨時(shí)抱抱佛腳的。
    的頭像 發(fā)表于 08-15 16:09 ?9939次閱讀
    <b class='flag-5'>java</b>常見(jiàn)<b class='flag-5'>數(shù)據(jù)結(jié)構(gòu)</b>面試

    數(shù)據(jù)結(jié)構(gòu)與算法分析——Java語(yǔ)言描述

    數(shù)據(jù)結(jié)構(gòu)與算法分析——Java語(yǔ)言描述說(shuō)明。
    發(fā)表于 05-31 14:25 ?22次下載

    SystemVerilog可以嵌套的數(shù)據(jù)結(jié)構(gòu)

    SystemVerilog除了數(shù)組、隊(duì)列和關(guān)聯(lián)數(shù)組等數(shù)據(jù)結(jié)構(gòu),這些數(shù)據(jù)結(jié)構(gòu)還可以嵌套。
    的頭像 發(fā)表于 11-03 09:59 ?1513次閱讀

    如何理解并掌握Java數(shù)據(jù)結(jié)構(gòu)

    Java 數(shù)據(jù)結(jié)構(gòu)Java 程序員必須掌握的重要知識(shí)之一。
    的頭像 發(fā)表于 06-06 15:53 ?771次閱讀

    嵌入式常用數(shù)據(jù)結(jié)構(gòu)有哪些

    在嵌入式編程數(shù)據(jù)結(jié)構(gòu)的選擇和使用對(duì)于程序的性能、內(nèi)存管理以及開(kāi)發(fā)效率都具有重要影響。嵌入式系統(tǒng)由于資源受限(如處理器速度、內(nèi)存大小等),因此對(duì)數(shù)據(jù)結(jié)構(gòu)的選擇和使用尤為關(guān)鍵。以下是嵌入式編程中
    的頭像 發(fā)表于 09-02 15:25 ?306次閱讀