国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
java Collection介紹
在 Java2中,有一套設(shè)計(jì)優(yōu)良的接口和類組成了Java集合框架Collection,使程序員操作成批的數(shù)據(jù)或?qū)ο笤貥O為方便。這些接口和類有很多對(duì)抽象數(shù)據(jù)類型操作的API,而這是我們常用的且在數(shù)據(jù)結(jié)構(gòu)中熟知的。例如Map,Set,List等。并且Java用面向?qū)ο蟮脑O(shè)計(jì)對(duì)這些數(shù)據(jù)結(jié)構(gòu)和算法進(jìn)行了封裝,這就極大的減化了程序員編程時(shí)的負(fù)擔(dān)。程序員也可以以這個(gè)集合框架為基礎(chǔ),定義更高級(jí)別的數(shù)據(jù)抽象,比如棧、隊(duì)列和線程安全的集合等,從而滿足自己的需要。

Java2的集合框架,抽其核心,主要有三種:List、Set和Map。如下圖所示:

需要注意的是,這里的 Collection、List、Set和Map都是接口(Interface),不是具體的類實(shí)現(xiàn)。 List lst = new ArrayList(); 這是我們平常經(jīng)常使用的創(chuàng)建一個(gè)新的List的語句,在這里, List是接口,ArrayList才是具體的類。

常用集合類的繼承結(jié)構(gòu)如下:
Collection<--List<--Vector
Collection<--List<--ArrayList
Collection<--List<--LinkedList
Collection<--Set<--HashSet
Collection<--Set<--HashSet<--LinkedHashSet
Collection<--Set<--SortedSet<--TreeSet
Map<--SortedMap<--TreeMap
Map<--HashMap

-----------------------------------------------SB分割線------------------------------------------

List:
List是有序的Collection,使用此接口能夠精確的控制每個(gè)元素插入的位置。用戶能夠使用索引(元素在List中的位置,類似于數(shù)組下 >標(biāo))來訪問List中的元素,這類似于Java的數(shù)組。

Vector:
基于數(shù)組(Array)的List,其實(shí)就是封裝了數(shù)組所不具備的一些功能方便我們使用,所以它難易避免數(shù)組的限制,同時(shí)性能也不可能超越數(shù)組。所以,在可能的情況下,我們要多運(yùn)用數(shù)組。另外很重要的一點(diǎn)就是Vector是線程同步的(sychronized)的,這也是Vector和ArrayList 的一個(gè)的重要區(qū)別。

ArrayList:
同Vector一樣是一個(gè)基于數(shù)組上的鏈表,但是不同的是ArrayList不是同步的。所以在性能上要比Vector好一些,但是當(dāng)運(yùn)行到多線程環(huán)境中時(shí),可需要自己在管理線程的同步問題。

LinkedList:
LinkedList不同于前面兩種List,它不是基于數(shù)組的,所以不受數(shù)組性能的限制。
它每一個(gè)節(jié)點(diǎn)(Node)都包含兩方面的內(nèi)容:
1.節(jié)點(diǎn)本身的數(shù)據(jù)(data);
2.下一個(gè)節(jié)點(diǎn)的信息(nextNode)。
所以當(dāng)對(duì)LinkedList做添加,刪除動(dòng)作的時(shí)候就不用像基于數(shù)組的ArrayList一樣,必須進(jìn)行大量的數(shù)據(jù)移動(dòng)。只要更改nextNode的相關(guān)信息就可以實(shí)現(xiàn)了,這是LinkedList的優(yōu)勢。

List總結(jié):
  • 所有的List中只能容納單個(gè)不同類型的對(duì)象組成的表,而不是Key-Value鍵值對(duì)。例如:[ tom,1,c ]

  • 所有的List中可以有相同的元素,例如Vector中可以有 [ tom,koo,too,koo ]

  • 所有的List中可以有null元素,例如[ tom,null,1 ]

  • 基于Array的List(Vector,ArrayList)適合查詢,而LinkedList 適合添加,刪除操作


--------------------------------------NB分割線------------------------------------

Set:
Set是一種不包含重復(fù)的元素的無序Collection。

HashSet:
雖然Set同List都實(shí)現(xiàn)了Collection接口,但是他們的實(shí)現(xiàn)方式卻大不一樣。List基本上都是以Array為基礎(chǔ)。但是Set則是在 HashMap的基礎(chǔ)上來實(shí)現(xiàn)的,這個(gè)就是Set和List的根本區(qū)別。HashSet的存儲(chǔ)方式是把HashMap中的Key作為Set的對(duì)應(yīng)存儲(chǔ)項(xiàng)??纯?HashSet的add(Object obj)方法的實(shí)現(xiàn)就可以一目了然了。
Java代碼
  1. public boolean add(Object obj) {    
  2.    return map.put(obj, PRESENT) == null;    
  3. }   

這個(gè)也是為什么在Set中不能像在List中一樣有重復(fù)的項(xiàng)的根本原因,因?yàn)镠ashMap的key是不能有重復(fù)的。

LinkedHashSet:
HashSet的一個(gè)子類,一個(gè)鏈表。

TreeSet:
SortedSet的子類,它不同于HashSet的根本就是TreeSet是有序的。它是通過SortedMap來實(shí)現(xiàn)的。

Set總結(jié):
  • Set實(shí)現(xiàn)的基礎(chǔ)是Map(HashMap)

  • Set中的元素是不能重復(fù)的,如果使用add(Object obj)方法添加已經(jīng)存在的對(duì)象,則會(huì)覆蓋前面的對(duì)象


--------------------------------------2B分割線------------------------------------

Map:
Map 是一種把鍵對(duì)象和值對(duì)象進(jìn)行關(guān)聯(lián)的容器,而一個(gè)值對(duì)象又可以是一個(gè)Map,依次類推,這樣就可形成一個(gè)多級(jí)映射。對(duì)于鍵對(duì)象來說,像Set一樣,一個(gè) Map容器中的鍵對(duì)象不允許重復(fù),這是為了保持查找結(jié)果的一致性;如果有兩個(gè)鍵對(duì)象一樣,那你想得到那個(gè)鍵對(duì)象所對(duì)應(yīng)的值對(duì)象時(shí)就有問題了,可能你得到的并不是你想的那個(gè)值對(duì)象,結(jié)果會(huì)造成混亂,所以鍵的唯一性很重要,也是符合集合的性質(zhì)的。當(dāng)然在使用過程中,某個(gè)鍵所對(duì)應(yīng)的值對(duì)象可能會(huì)發(fā)生變化,這時(shí)會(huì)按照最后一次修改的值對(duì)象與鍵對(duì)應(yīng)。對(duì)于值對(duì)象則沒有唯一性的要求,你可以將任意多個(gè)鍵都映射到一個(gè)值對(duì)象上,這不會(huì)發(fā)生任何問題(不過對(duì)你的使用卻可能會(huì)造成不便,你不知道你得到的到底是那一個(gè)鍵所對(duì)應(yīng)的值對(duì)象)。

Map有兩種比較常用的實(shí)現(xiàn):HashMap和TreeMap。

HashMap也用到了哈希碼的算法,以便快速查找一個(gè)鍵,

TreeMap則是對(duì)鍵按序存放,因此它便有一些擴(kuò)展的方法,比如firstKey(),lastKey()等,你還可以從TreeMap中指定一個(gè)范圍以取得其子Map。
鍵和值的關(guān)聯(lián)很簡單,用put(Object key,Object value)方法即可將一個(gè)鍵與一個(gè)值對(duì)象相關(guān)聯(lián)。用get(Object key)可得到與此key對(duì)象所對(duì)應(yīng)的值對(duì)象。

--------------------------------------JB分割線------------------------------------

其它:
一、幾個(gè)常用類的區(qū)別
1.ArrayList: 元素單個(gè),效率高,多用于查詢
2.Vector: 元素單個(gè),線程安全,多用于查詢
3.LinkedList:元素單個(gè),多用于插入和刪除
4.HashMap: 元素成對(duì),元素可為空
5.HashTable: 元素成對(duì),線程安全,元素不可為空

二、Vector、ArrayList和LinkedList
大多數(shù)情況下,從性能上來說ArrayList最好,但是當(dāng)集合內(nèi)的元素需要頻繁插入、刪除時(shí)LinkedList會(huì)有比較好的表現(xiàn),但是它們?nèi)齻€(gè)性能都比不上數(shù)組,另外Vector是線程同步的。所以:
如果能用數(shù)組的時(shí)候(元素類型固定,數(shù)組長度固定),請(qǐng)盡量使用數(shù)組來代替List;
如果沒有頻繁的刪除插入操作,又不用考慮多線程問題,優(yōu)先選擇ArrayList;
如果在多線程條件下使用,可以考慮Vector;
如果需要頻繁地刪除插入,LinkedList就有了用武之地;
如果你什么都不知道,用ArrayList沒錯(cuò)。

三、Collections和Arrays
在 Java集合類框架里有兩個(gè)類叫做Collections(注意,不是Collection?。┖虯rrays,這是JCF里面功能強(qiáng)大的工具,但初學(xué)者往往會(huì)忽視。按JCF文檔的說法,這兩個(gè)類提供了封裝器實(shí)現(xiàn)(Wrapper Implementations)、數(shù)據(jù)結(jié)構(gòu)算法和數(shù)組相關(guān)的應(yīng)用。
想必大家不會(huì)忘記上面談到的“折半查找”、“排序”等經(jīng)典算法吧,Collections類提供了豐富的靜態(tài)方法幫助我們輕松完成這些在數(shù)據(jù)結(jié)構(gòu)課上煩人的工作:
binarySearch:折半查找。

sort:排序,這里是一種類似于快速排序的方法,效率仍然是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表示。

這次關(guān)于Java集合類概述就到這里,下一次我們來講解Java集合類的具體應(yīng)用,如List排序、刪除重復(fù)元素。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Java之集合類應(yīng)用總結(jié)(轉(zhuǎn)載)
Java集合總結(jié)
Java容器學(xué)習(xí)筆記(一) 容器中基本概念及Collection接口相關(guān)知識(shí)
對(duì)于Java集合的一些總結(jié)
List的實(shí)現(xiàn)類有哪些?它們的底層實(shí)現(xiàn)是怎樣完成的?它們之間有什么區(qū)別?在什么時(shí)候選用什么樣的實(shí)現(xiàn)類...
java 容器類使用 Collection,Map,HashMap,hashTable,TreeMap,List,Vector,ArrayList的區(qū)別
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服