三者都實現(xiàn)了集合框架中的List,也就是所謂的有序集合郎仆,都提供按照位置進行定位、添加或者刪除操作兜蠕,都提供迭代器遍歷內(nèi)容
Vector是java早期提供的線程安全的動態(tài)數(shù)組扰肌,如果不需要線程安全,不建議選擇熊杨,畢竟同步是有額外開銷的曙旭。內(nèi)部使用數(shù)組來保存數(shù)據(jù),根據(jù)需要自動擴容(創(chuàng)建新的數(shù)組晶府,拷貝原有數(shù)組)桂躏,每次增加一倍
ArrayList是應用更加廣泛的動態(tài)數(shù)組實現(xiàn),本身不是線程安全的川陆,所以性能要好很多剂习,可以根據(jù)需要擴容,每次增加50%
LinkedList顧名思義是java提供的雙向鏈表较沪,不需要調(diào)整容量鳞绕,也不是線程安全的。
補充
? Vector和ArrayList比較適合隨機訪問(通過index下標訪問尸曼,行為類似數(shù)組的訪問)们何,在中間插入數(shù)據(jù)的話,性能會比較差
? LinkedList在進行節(jié)點插入和刪除的時候骡苞,比較高效垂蜗,隨機訪問性能慢
所以在使用過程中楷扬,要注意兩點,一個是線程安全問題贴见,一個是插入多還是隨機訪問多烘苹。
整體集合
? List,有序集合,提供方便的訪問片部、插入镣衡、刪除
? Set,不允許重復元素,
? Queue/Deque,標準隊列結構档悠,支持先入先出和后入先出等特定行為
Set
? TreeSet支持自然訪問廊鸥,但是添加、刪除包含等操作比較低效
? HashSet是利用哈希算法辖所,無序
? LinkedHashSet內(nèi)部構建了一個記錄插入順序的雙向鏈表惰说,因此提供了按照插入順序遍歷的能力,
? 在遍歷元素的時候缘回,hashset性能受自身容量影響吆视,所以初始化的時候,除非有必要酥宴,不然不要將其背后的HashMap容量設置過大啦吧。而對于LinkedHashSet由于內(nèi)部鏈表提供方便,遍歷性能和元素多少有關