1. 程式人生 > >集合List、Set、Map詳解

集合List、Set、Map詳解

List、Set、Map是否繼承自Collection介面?

List、Set是map不是,List是線性結構的容器,底層使用陣列實現,使用於按數值索引訪問元素的情形;Set儲存零散的元素且不允許有重複的元素(類似數學中的集合);Map儲存的是key-value鍵值對

闡述ArrayList、Vector、LinkedList的儲存效能和特性?

共同點:ArrayList、LinkedList、Vector都是List介面的實現類,儲存的資料都是有序的、可重複的。

區別:ArrayList:作為List的主要實現類;底層使用陣列;效率高;執行緒不安全的;

為什麼ArrayList執行緒不安全?

ArrayList在增加元素時進行兩步操作,1、判斷size是否能放下add的元素;2、向底層陣列中新增元素;因此多個執行緒同時向List中新增元素會出現  陣列越界的異常;或者A執行緒add的值覆蓋了B執行緒add的值;

解決方法?

工具類Collections中定義 了 synchronizedList(List list)方法,將此ArrayList轉化為執行緒安全的;以讀為主的場景中使  CopyOnWriteArrayList解決執行緒安全問題;CopyOnWrite容器即寫時複製的容器。通俗的理解是當我們往一個容器新增元素的時候,不直接往當前容器新增,而是先將當前容器進行Copy,複製出一個新的容器,然後新的容器裡新增元素,新增完元素之後,再將原容器的引用指向新的容器。這樣做的好處是我們可以對CopyOnWrite容器進行併發的讀,而不需要加鎖,因為當前容器不會新增任何元素。所以CopyOnWrite容器也是一種讀寫分離的思想,讀和寫不同的容器。