List--列表:內部元素有序,能夠重複,java
ArrayList:線程不安全,效率高。數據結構是線性表,底層結構是順序表,也就是數組,有惟一的下標來指定元素的位置,查詢快,增刪慢。數組
Vector:相似於ArrayList,可是線程安全,代價就是效率低。徹底能夠用ArrayList來替代,安全
List<String> list = Collections.synchronizedList(new ArrayList<String>())
上面代碼就是將ArrayList改成線程安全的,其他的操做基本和本來同樣。數據結構
LinkedList:線程不安全,效率高。數據結構是線性表,底層結構是單鏈表,查詢慢,可是增刪快併發
Set--集合:內部元素無序,不可重複ide
HashSet:線程不安全,效率高。數據結構是哈希表,底層結構是順序表,LinkedHashSet的底層結構是單鏈表,具體類比ArrayList,spa
TreeSet:線程不安全,效率高。數據結構是紅黑樹,和HashSet的區別在於,它的元素是有序的,而這裏的有序和咱們在List談到的有序不是一個意思,List中的有序是指你輸入["gol","long","xiao"],在存儲的時候下標0對應的就是"gol",下標1對應的就是"long",而這裏的有序指的是元素在存儲時本身遵照的一套規則,由於自己元素是不可重複的,和咱們的添加順序沒有關係,好比咱們輸入[3,2,1],在存儲是就會變爲[1,2,3],按照1,2,3這個規則來排序,若是想獲得相似於list的那種有序,LinkedHashSet能夠實現。線程
Map--字典:經過「鍵」尋找「值」code
HashMap:線程不安全,效率高。數據結構是哈希表,底層結構是順序表,LinkedHashMap的底層結構是單鏈表,具體類比ArrayListblog
TreeMap:線程不安全,效率高。數據結構是紅黑樹,能夠存儲 null 值
HashTable:線程安全,效率低。數據結構是哈希表,不能存儲 null 值
list能夠經過索引取值遍歷,map能夠經過鍵值,那set要怎麼遍歷呢?其實map的鍵的集合就是一個set,咱們不處理怎麼遍歷set的問題就沒法查看set和map中的值了,因而就有了迭代器
HashSet set = new HashSet<>(); set.add(99); set.add(100); set.add("gol"); Iterator it = set.iterator(); while (it.hasNext()){ System.out.println(it.next()); }
迭代器就是一種提取集合中數據的接口,咱們只須要對集合調用iterator()方法生成一個迭代器集合,而其內部如何生成對咱們隱藏了,在迭代器中修改原集合的會觸發ConcurrentModificationException(併發修改異常),也就是說在迭代器中不要進行修改(修改元素的值能夠的,只要沒有改變原集合的長度)的操做,會出錯。若想在迭代的時候修改長度,List集合特有的listIterator()方法能夠實現,(但僅僅是List有此方法)
而加強for循環就是在底層封裝了迭代器,全部一樣存在併發修改異常
HashSet<Integer> set = new HashSet<>(); set.add(99); set.add(100); set.add(98);for (Integer s:set){ System.out.println(s); }