list集合要點總結
1. 集合框架的最頂層為collection介面。
2.集合裡存放的並不是物件的實體,而是物件實體的引用位址。
3.集合可以通過迭代器(iterator)來遍歷元素,iterator()
方法實際上是返回了集合中的乙個內部類例項,該內部類例項實現了iterator介面,並且可以直接訪問儲存在集合中的物件。
4. 關於collection介面的兩個重要子介面list和set:
list:元素是有序的,並且可以有重複元素。
set:元素是無序的,不可以有重複元素。
5. 在迭代時,不可以通過集合list的方法操作集合中的元素,因為會發生
concurrentmodificationexception
異常。6. list介面的三個重要實現類arraylist,linkedlist,vector。
arraylist底層採用陣列實現,查詢操作會更快。
linkedlist底層採用雙向鍊錶實現,增刪操作會更快。
vector(已過時)底層實現同arraylist,區別在於它是執行緒同步的,而arraylist執行緒不同步。
當需要增長時,vector預設增長為原來一培,而arraylist卻是原來的一半。
7.list集合判斷元素是否相同(contains()判斷),依據的是元素的
equals()
方法。set集合要點總結:
1.set介面:元素是無序的(存入和取出的順序不一定一致),元素不可以重複。
2.hashset底層資料結構是雜湊表,且執行緒不安全。
3.hastset中確定元素是否重複,首先判斷元素的hashcode是否相同,如果相同,在呼叫equals()判斷,如果返回true,則元素相同,否則視為不同。故在向集合新增元素時,如果重寫元素equals()方法,hashcode()方法也建議被重寫(add()|contains()|remove())。
4. arraylist確定元素唯一性只依賴於equals()方法;
hashset
確定元素唯一性先判斷hashcode是否相同,再判斷equals()。
5. 向treeset集合中新增自定義物件時,因為無法比較被新增元素與集合中元素的大小,將丟擲classcastexception。此時可以在自定義物件中實現comparable介面中的compareto()方法來定義比較方式。
6.treeset底層採用二叉樹資料結構。
7. treeset確定元素唯一性:判斷元素compareto()方法是否return0。
8. 當元素自身不具備比較性,或者具備的比較性不是所需要的。可以向集合建構函式中傳入乙個比較器,該比較器實現comparator介面並重寫了compare(to1,to2)方法來進行新增元素時的比較。
9. 當兩comparable與comparator都存在時,以comparator比較器為主(推薦使用comparator)。
10.comparable與comparator介面的異同:
1)實現comparable介面的類,似乎是預先知道該類將要進行排序,需要排序的類實現comparable介面,是一種「靜態繫結排序」。
2)實現comparator的類不需要,設計者無需事先為需要排序的類實現任何介面。
3)comparator介面無需改變排序類的內部,也就是說實現演算法和資料分離,是乙個良好的設計,是一種「動態繫結排序」。
11.linkedhashset,具有hashset的查詢速度,且內部使用鍊錶維護元素的順序(插入的次序),於是在使用迭代器遍歷set時,結果會按元素插入的次序顯示。(linkedhashmap與hashmap的關係意思相同)
map集合要點總結:
1. map介面的三個重要實現類:
|--hashtable:底層是雜湊表資料結構,不允許存放
null
鍵null
值,執行緒同步。jdk1.0出現,效率較低。
|--hashmap:底層是雜湊表資料結構,允許存放
null
鍵null
值,執行緒不同步。
jdk1.2出現,替代hashtable,效率高。
|--treemap:底層是二叉樹結構,執行緒不同步,可以對鍵值進行排序。
2. set集合底層實際上使用了map集合。
3. 方法put(kkey,v value)有返回值v,通過put(k key,v value)向map
集合新增元素時,如果同乙個
key值之前已存在對應的
value
,那麼新新增的
value
將替換掉原有的
value
,並將原有的
value
作為返回值返回。如果
key之前不存在
value
,返回值為
null。
4.map集合沒有迭代器(iterator),但提供了兩個重要方法,keyset()和entryset(),通過這兩個set集合的iterator來獲取每個元素。
5.entryset返回set儲存著map集合中的鍵值對,entry
其實就是
map中的乙個內部靜態介面,實現了
getvalue(),getkey()
和setvalue()
方法來操作元素。
6. hashmap底層實際上是陣列與鍊錶(entry)的混合結構。當向hashmap中put一對鍵值時,它會根據key的hashcode值計算出乙個位置,該位置就是此物件準備往陣列中存放的位置。如果該位置沒有物件存在,就將此物件直接放進陣列當中;如果該位置已經有物件存在了,則順著此存在的物件的鏈開始尋找(entry類有乙個entry型別的next成員變數,指向了該物件的下乙個物件),如果此鏈上有物件的話,再去使用equals方法進行比較,如果對此鏈上的所有物件的equals方法比較為false,則將該物件放到鍊錶的頭乙個位置,然後將鍊錶中頭位置以前存在的那個物件鏈結到此物件的後面。
集合工具類:
1. collections類的所有方法都為靜態的,提供了很多任務具方法來操作集合。
2. collections.sort()有兩個過載方法都可對list集合進行排序,後者可傳入比較器引數進行排序。
3. collections.binarysearch()有兩個過載方法,使用二分查詢法查詢指定元素索引,使用前
list
集合必須經過公升序排序,如果沒有找到指定元素,
返回插入點
-1。
Java 集合框架總結
1.元素是否可以為null 除了hashtable外,vector,arraylist,linkedlist,treeset,hashset,hashmap,linkedhashmap,treemap 元素都可以為空 2.是否線性安全 除hashtable,vecotr外,其他都不是執行緒安全的。在...
java總結(集合框架)
1 集合框架 collection and map,集合和對映,容器類 cpp 集合框架是為表示是為表示和操作集合而規定的一種統一的標準體系結構 在程式設計中容器是用來組織和儲存其他物件的物件 實現鍊錶的類就是乙個容器的例項 1 list 元素有先後次序的集合,元素有index位置 元素可以重複 繼...
Java集合框架的總結
1.陣列把物件和數字形式的下標聯絡起來。它持有的是型別確定的物件,這樣提取物件的時候就不用再作型別傳遞了。它可以是多維的,也可以持有primitive。但是建立之後它的容量不能改了。2.collection持有單個元素,而map持有相關聯的pair。3.和陣列一樣,list也把數字下標同物件聯絡起來...