日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

java集合类框架

發(fā)布時間:2025/4/16 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java集合类框架 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原文出處:于衛(wèi)國,http://yuweiguocn.github.io/java-collection/

Java集合類框架概覽及各集合之間的區(qū)別。
集合中存放的是對象的引用。
Collections:集合的搜索、排序、線程安全化等

Collection接口

  • boolean add(Object o)
  • boolean addAll(Collection c)
  • boolean remove(Object o)
  • boolean removeAll(Collection c)去交集
  • boolean retainAll(Collection c)取交集
  • Iterator iterator()
  • Object[] toArray()
  • Object[] toArray(Object[] a)

Iterator接口

boolean hasNext()
Object next()

for(Iterator it=c.iterator();it.hasNext();) {Object o=it.next(); }

ListIterator接口

ListIterator是Iterator的子接口。

Iterator和ListIterator的區(qū)別

  • 遍歷方法 ListIterator和Iterator都有hasNext()和next()方法,可以實(shí)現(xiàn)順序身后遍歷,但是ListIterator還有hasPrevious()和pervious()- 方法,可以實(shí)現(xiàn)逆向(順序向前)遍歷,Iterator就不可以。
  • 遍歷索引定位 ListIterator 可以定位索引位置——nextIndex()和previousIndex(),Iterator沒有此功能。
  • 增加集合對象元素方法 ListIterator有add方法,可以向List中添加對象,而Iterator不能。
  • 對象維護(hù) 都可實(shí)現(xiàn)刪除對象,但ListIterator可以調(diào)用set方法來對集合元素進(jìn)行修改。而Iterator不能。

Map接口類型

Map接口實(shí)現(xiàn)者調(diào)用接口方法values()返回一個實(shí)現(xiàn)collection接口的對象引用。collection接口的實(shí)現(xiàn)者又可以調(diào)用iterator()方法返回一個實(shí)現(xiàn)Iterator接口的對象引用。

Map接口用于將一個鍵(key)映射到一個值(value),且不允許有重復(fù)的鍵。Map提供了一個稱為entrySet()的方法,這個方法返回一個實(shí)現(xiàn)Set接口的集合對象,集合中的每個對象元素又都實(shí)現(xiàn)了Map.Entry接口。Map.Entry接口提供了一個getKey()方法和一個getValue()方法。

集合對象排序接口Comparator

實(shí)現(xiàn)此接口的類可以進(jìn)行排序,實(shí)現(xiàn)compare方法就可以了。
基本數(shù)據(jù)類型實(shí)現(xiàn)了這個接口,調(diào)用Collections.sort(list)進(jìn)行排序;
如果Comparator只用一次,可使用匿名類。

List和Set的區(qū)別

List:
元素是有序的,因?yàn)樵摷象w系有索引
元素可以重復(fù)
Set:
元素是無序的
元素不可以重復(fù)
取出只能是Iterator

HashSet和TreeSet的區(qū)別

HashSet:
哈希表結(jié)構(gòu) 判斷是否重復(fù)用hashCode和equals方法
當(dāng)hashCode相等時判斷equals方法
TreeSet:
二叉樹結(jié)構(gòu),可以排序

Vector和ArrayList的區(qū)別

Vector:
線程同步
當(dāng)Vector中的元素超過它的初始大小時,Vector會將它的容量翻倍

ArrayList:
線程不同步,但性能很好
當(dāng)ArrayList中的元素超過它的初始大小時,ArrayList只增加50%的大小

ArrayList和LinkedList的區(qū)別

ArrayList:
底層是數(shù)組數(shù)據(jù)結(jié)構(gòu)
查詢快,增刪慢

LinkedList:
底層是鏈表數(shù)據(jù)結(jié)構(gòu)
增刪快,查詢慢

HashTable和HashMap的區(qū)別

HashTable:
線程同步
不允許key和value的值為null
HashMap:
線程不同步
允許一個key為null,和多個value為null

TreeMap和HashMap的區(qū)別

  • TreeMap:
    • 二叉樹結(jié)構(gòu)
    • 線程不同步
    • 可用于給map集合中的鍵進(jìn)行排序
  • HashMap:
    • 哈希表結(jié)構(gòu)
    • 線程不同步
    • 允許一個key為null,和多個value為null

hashCode的作用

哈希算法可以提高從集合中查找元素的效率,這種方式將集合分成若干個存儲區(qū)域,每個對象可以計(jì)算出一個哈希碼,可以將哈希碼分組,每組分別對應(yīng)某個存儲區(qū)域,根據(jù)一個對象的哈希碼就可以確定對象應(yīng)該存儲在哪個區(qū)域。hashCode在有哈希算法類的集合里才有價值,如hashSet、hashMap、hashTable。只有類的實(shí)例對象被要求采用哈希算法進(jìn)行存儲和檢索時,這個類才需要按要求覆蓋hashCode方法。

當(dāng)一個對象存儲進(jìn)hashSet集合中就不能再修改這個對象中的那些參與計(jì)算哈希值的字段了,否則,對象修改后的哈希值與最初存儲進(jìn)HashSet集合時的哈希值就不同了。這種情況下,即使在contains方法中使用該對象的當(dāng)前引用作為參數(shù)去HashSet集合中檢索對象,也將返回找不到對象的結(jié)果,這也會導(dǎo)致無法從HashSet集合中單獨(dú)刪除當(dāng)前對象,從而造成內(nèi)存泄露。

集合類的選擇

是否有線程安全問題
集合類的元素數(shù)量是否很大(很大應(yīng)該選擇Hash開頭的類,便于快速檢索)
哪種集合類的結(jié)構(gòu)方便當(dāng)前使用

Collections類

  • Set singleton(Object o)
  • List singletonList(Object o)
  • Map singletonMap(Object key,Object value)
  • 填充集合 nCopies(int length,Object o)
  • 復(fù)制集合 copy(List dest,List src)
  • 查找替換 boolean replaceAll(List list,Object oldVal,Object newVal)
  • 集合排序 void sort(List list)

總結(jié)

以上是生活随笔為你收集整理的java集合类框架的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。