Java集合常用的是List、Set、Map這個(gè)三個(gè)接口,對(duì)內(nèi)容歸納下,以便后續(xù)有新的知識(shí)點(diǎn)擴(kuò)張也好分清界限。
1、List主要實(shí)現(xiàn):
線程不安全:
1)ArrayList:基于數(shù)組實(shí)現(xiàn)。
2)LinkedList:基于鏈表實(shí)現(xiàn)。
線程安全:
1)Vector:基于數(shù)組實(shí)現(xiàn),安全基于同步鎖實(shí)現(xiàn)
2)SynchronizedList:這個(gè)是Collections生成的內(nèi)部類(lèi),其實(shí)就是封裝了一層,用的同步鎖。
3)CopyOnWriteArrayList:基于數(shù)組實(shí)現(xiàn),安全基于ReentrantLock實(shí)現(xiàn),add操作效率極差,沒(méi)有擴(kuò)容機(jī)制。
2、Set主要實(shí)現(xiàn):
線程不安全:
1)HashSet:基于HashMap實(shí)現(xiàn),用來(lái)去重。
2)TreeSet:基于TreeMap實(shí)現(xiàn),用來(lái)去重加排序。
3)WeakHashMap:基于數(shù)組+鏈表,鏈表是WeakReference的子類(lèi),沒(méi)用過(guò),這一般也用的很少,使用場(chǎng)景也特殊,用來(lái)實(shí)現(xiàn)弱引用以便垃圾回收。
線程安全:
1)SynchronizedSet:這個(gè)是Collections生成的內(nèi)部類(lèi),其實(shí)就是封裝了一層,用的同步鎖。
2)CopyOnWriteArraySet:基于CopyOnWriteArrayList實(shí)現(xiàn),安全基于ReentrantLock實(shí)現(xiàn)。
3)ConcurrentSkipListSet:基于ConcurrentSkipListMap,安全基于CAS 。
3、Map主要實(shí)現(xiàn)
線程不安全:
1)HashMap:基于數(shù)組+鏈表+紅黑樹(shù)實(shí)現(xiàn)。
2)TreeMap:基于紅黑樹(shù)實(shí)現(xiàn),用于有序。
線程安全:
1)HashTable:基于數(shù)組+鏈表,安全基于同步鎖,性能差。
2)ConcurrentHashMap:基于數(shù)組+鏈表+紅黑樹(shù)實(shí)現(xiàn),安全基于同步鎖+CAS。
3)ConcurrentSkipListMap:基于鏈表實(shí)現(xiàn),用于有序,有序基于跳表實(shí)現(xiàn),安全基于CAS。