集合類(lèi)
- Set
- HashSet
-
優(yōu)點(diǎn):
后臺(tái)實(shí)現(xiàn)一個(gè)hash table 加速get和contains方法。后臺(tái)使用數(shù)組保存
缺點(diǎn):
默認(rèn)大小為16, 如果超過(guò)則需要重新申請(qǐng)內(nèi)存空間,大小為原來(lái)的兩倍,并把原來(lái)的數(shù)據(jù)內(nèi)容復(fù)制到
新的內(nèi)存空間中。
線程不安全(需通過(guò)Collections.synchronizedList方法設(shè)置)
加入的元素順序會(huì)因其內(nèi)部的hash排序而改變
注:通常缺省的load factor 0.75較好地實(shí)現(xiàn)了時(shí)間和空間的均衡。增大load factor可以節(jié)省空間但相應(yīng)的查找時(shí)間將增大,這會(huì)影響像get和put這樣的操作。
-
- LinkedHashSet
-
優(yōu)點(diǎn):
后臺(tái)實(shí)現(xiàn)一個(gè)hash table 加速get和contains方法。后臺(tái)使用鏈表保存
缺點(diǎn):
默認(rèn)大小為16, 如果超過(guò)則需要重新申請(qǐng)內(nèi)存空間,大小為原來(lái)的兩倍,并把原來(lái)的數(shù)據(jù)內(nèi)容復(fù)制到
新的內(nèi)存空間中。
線程不安全(需通過(guò)Collections.synchronizedList方法設(shè)置)
加入的元素順序會(huì)因其內(nèi)部的hash排序而改變
注:通常缺省的load factor 0.75較好地實(shí)現(xiàn)了時(shí)間和空間的均衡。增大load factor可以節(jié)省空間但相應(yīng)的查找時(shí)間將增大,這會(huì)影響像get和put這樣的操作。
-
- TreeSet
-
優(yōu)點(diǎn):
通過(guò)一個(gè)HashMap來(lái)實(shí)現(xiàn)數(shù)據(jù)的保存,內(nèi)部實(shí)現(xiàn)紅黑樹(shù)數(shù)據(jù)結(jié)構(gòu),使所有元素按升序保存。
提供高效的get和contains方法,保存操作的效率為log(n)
缺點(diǎn):
默認(rèn)大小為16, 如果超過(guò)則需要重新申請(qǐng)內(nèi)存空間,大小為原來(lái)的兩倍,并把原來(lái)的數(shù)據(jù)內(nèi)容復(fù)制到
新的內(nèi)存空間中(來(lái)自HashMap)。
線程不安全(需通過(guò)Collections.synchronizedList方法設(shè)置)
加入的元素升級(jí)排序而改變
注:treeset對(duì)元素有要求,必須實(shí)現(xiàn)Comparable接口或是Comparator 接口)
注:通常缺省的load factor 0.75較好地實(shí)現(xiàn)了時(shí)間和空間的均衡。增大load factor可以節(jié)省空間但相應(yīng)的查找時(shí)間將增大,這會(huì)影響像get和put這樣的操作。
-
- CopyOnWriteArraySet
- 優(yōu)點(diǎn):
針對(duì)于對(duì)Set操作的情況有很多變化時(shí)使用,優(yōu)其是在高并發(fā)的情況不想使用同步控制鎖時(shí)
缺點(diǎn):
消耗比較大的資料,每次作更新操作時(shí),都會(huì)重新Copy一塊內(nèi)存后,再做合并操作。
- 優(yōu)點(diǎn):
- HashSet
- List
- ArrayList
-
優(yōu)點(diǎn):
使用數(shù)組,提供快速的get,add和iterate方法,占用比較小的內(nèi)存空間
缺點(diǎn):
線程不安全(需通過(guò)Collections.synchronizedList方法設(shè)置)
insert和remove操作,非常慢(需要移動(dòng)數(shù)組元素來(lái)實(shí)現(xiàn))
當(dāng)size超過(guò)時(shí),需要新建一個(gè)較大的數(shù)據(jù)(默認(rèn)大小是10,增量是 (size * 3)/2 + 1,
且把原來(lái)的數(shù)據(jù)都復(fù)制到新的上面)
-
- LinkedList
-
優(yōu)點(diǎn):
使用鏈表結(jié)構(gòu),提供快速的add, insert, remove方法,占用比較小的內(nèi)存空間
缺點(diǎn):
線程不安全(需通過(guò)Collections.synchronizedList方法設(shè)置)
get操作,非常慢(需要從head一級(jí)級(jí)遍歷查找)
-
- Vector
- 優(yōu)點(diǎn):
線程安全。
缺點(diǎn):
相對(duì)于ArrayList效率要低。擁有ArrayList的缺點(diǎn)。
- 優(yōu)點(diǎn):
- CopyOnWriteArrayList
- 優(yōu)點(diǎn):
針對(duì)于對(duì)List操作的情況有很多變化時(shí)使用,優(yōu)其是在高并發(fā)的情況不想使用同步控制鎖時(shí)
缺點(diǎn):
消耗比較大的資料,每次作更新操作時(shí),都會(huì)重新Copy一塊內(nèi)存后,再做合并操作。
- 優(yōu)點(diǎn):
- TreeList(apache commons-collections)提供
-
優(yōu)點(diǎn):
基于二叉數(shù) 提供比較快速的get, add,insert,iterate,remove方法。其中g(shù)et,add和iterate方法比ArrayList稍慢一點(diǎn)。
缺點(diǎn):
相對(duì)于ArrayList和LinkedList占比較多的內(nèi)存空間
線程不安全(需通過(guò)Collections.synchronizedList方法設(shè)置)
-
- ArrayList
- Map
- ConcurrentHashMap
-
優(yōu)點(diǎn):
基于二叉數(shù) 提供比較快速的get, add,iterate方法。默認(rèn)大小的16.
它是線程安全
缺點(diǎn):
如果大小超過(guò)設(shè)定的大小時(shí),效率會(huì)非常低。它會(huì)重新申請(qǐng)內(nèi)存空間(原來(lái)空間的兩倍),同時(shí)把原來(lái)的值復(fù)制到新內(nèi)存空間上。
-
- ConcurrentHashMap
Yours Matthew!