標籤:
Java的集合類分為兩個類型,Collection和Map,Collection又分為Set和List。
1. 集合類中元素是否相同
HashSet使用equals和HashCode兩個函數共同決定
TreeSet使用comparable介面中的compareTo,或者comparator中的compare函數
ArrayList使用equals函數
HashMap中的key和HashSet相同,value使用equals函數
TreeMap中的key和TreeSet相同,value使用equals函數
2. 集合中是否可以包含null,或者重複的元素
HashSet 可以包含null,不能包含重複元素
TreeSet 同HashSet,可以包含一個null,加入第二個null會引發異常
ArrayList 可以包含null,也能包含重複元素
HashMap中的key和HashSet相同,value可以包含多個null
TreeMap中的key和TreeSet相同,value可以包含多個null
3. 關於contains和remove函數
HashSet,TreeSet,ArrayList 可以使用如下的函數來判斷是否包含一個元素,或者刪除一個元素
boolean contains(Object o)
boolean remove(Object o)
HashMap,TreeMap有如下函數:
boolean containsKey(Object key)
boolean containsValue(Object key)
boolean remove(Object key)
在這些函數的實現中,都需要調用equals方法,那麼是調用參數的equals方法(用集合中元素為equals函數參數)呢,還是調用每個元素的equals方法呢?
答案是調用參數的equals方法。以remove方法的實現為例
- public boolean remove(Object o) {
- if (o == null) {
- for (int index = 0; index < size; index++)
- if (elementData[index] == null) {
- fastRemove(index);
- return true;
- }
- } else {
- for (int index = 0; index < size; index++)
- if (o.equals(elementData[index])) {
- fastRemove(index);
- return true;
- }
- }
- return false;
- }
4. 集合類和Array
集合類Collection有Object[] toArray()函數,用於將集合轉化為Array。
Arrays工具類提供了asList(Object... a)方法,用於將Array轉化為ArrayList,注意這個是Arrays類的內部類,也繼承自List,它的長度固定,和之前的ArrayList不同。
Java集合類學習總結