java常用的集合類有哪些?如何排序?
原文地址https://www.cnblogs.com/Huanghaihui/p/6114889.html
集合的結構如下圖所示:
集合的兩個頂級介面分別為:Collection和Map
Collection下有兩個比較常用的介面分別是List(列表)和Set(集),其中List可以儲存重複元素,元素是有序的(存取順序一致),可以通過List腳標來獲取指定元素;而Set不可以有重複元素,元素是無序的。
List介面中,比較常用的類有三個:ArrayList、Vactor、LinkedList。
ArrayList :執行緒不安全的,對元素的查詢速度快。
Vector :執行緒安全的,多了一種取出元素的方式:列舉(Enumeration),但已被ArrayList取代。
LinkedList :連結串列結構,對元素的增刪速度很快。
Set介面中,比較常用的類有兩個:HashSet、TreeSet:
HashSet:要保證元素唯一性,需要覆蓋掉Object中的equals和hashCode方法(因為底層是通過這兩個方法來判斷兩個元素是否是同一個)。
TreeSet:以二叉樹的結構對元素進行儲存,可以對元素進行排序。
排序的兩種方式:
1、元素自身具備比較功能,元素實現Comparable介面,覆蓋compareTo方法。
2、建立一個比較器物件,該物件實現Comparator介面,覆蓋compare方法,並將該物件作為引數傳給TreeSet的建構函式(可以用匿名內部類)。
Map介面其特點是:元素是成對出現的,以鍵和值的形式體現出來,鍵要保證唯一性:常用類有:HashMap,Hashtable ,TreeMap。
HashMap:執行緒不安全等的,允許存放null鍵null值。
Hashtable:執行緒安全的,不允許存放null鍵null值。
TreeMap:可以對鍵進行排序(要實現排序方法同TreeSet)。
Collection和Map兩個介面對元素操作的區別:
存入元素:
Collection介面下的實現類通過add方法來完成,而Map下是通過put方法來完成。
取出元素:
Collection介面下:List介面有兩種方式:1、get(腳標);2、通過Iterator迭代方式獲取元素;而Vactor多了一種列舉(Enumeration)的方式。Set介面通過迭代的方式獲取元素。
Map介面下:先通地keySet獲取鍵的系列,然後通過該系列使用Iterator迭代方式獲取元素值。