Collection集合框架詳解


Java的集合框架】

接口:

  collection             map

list        set

實現類:

ArryList    HashSet     HashMap

LinkList    LinkHashSet   LinkHashMap

             TreeSet        TreeMap

                        HashTable

 

【四個接口的區別】

1collection:存儲不唯一、無序的數據;

2list:存儲有序的、不唯一的數據;

3set:存儲無序的、唯一的數據;

4Map:以鍵值對的形式存儲數據,以鍵取值。鍵不能重復、值可以重復。

 

List接口】

1、常用方法:

① add():在列表的最后添加元素;

② add(int index,E element):在列表的指定位置插入元素;

③ size():返回當前列表的元素個數;

④ get(int index):返回下標為index的元素。

如果沒有泛型約束,返回Object類型,需要強轉;如果有泛型約束,直接返回泛型類型,無需強轉。

⑤ clear():清除列表中的所有數據

     isEmpty():檢測列表是否為空

⑥ contains():傳入一個對象,檢測列表中是否包含該對象。

    如果傳入的是String和基本數據類型,可以直接比對

    如果傳入的是實體類,則默認只比對兩個對象的地址。因此,需要在實體類重寫equals()方法;

Tips

String s = "123";

"123".equals(s);//這個順序可以防止空指針

⑦ indexOf():傳入一個對象,返回該對象在列表中首次出現的地址。

    lastIdexOf():傳入一個對象,返回該對象在列表中最后一次出現的地址。

⑧remove():傳入一個下標,或者一個對象,刪除指定元素;

    如果傳入下標,返回被刪除的對象,如果下標大於size(),會報下標越界異常;

    如果傳入對象,則要求重寫equals方法,返回truefalse表示刪除是否成功

⑨set(index, obj):用新傳入的對象,將指定位置的元素替換掉;

    返回被替換掉的元素對象。

⑩subList(1,3):截取一個子列表,返回List類型;

   toArray():將列表轉為數組。返回一個Object[]類型的數據

 

2ArrayList

     實現了一個長度可變的數組,在內存空間中開辟一串連續的空間,與數組的區別在於長度可以隨意修改。這種存儲結構在循環遍歷和隨機訪問元素的速度比較快。

 

3LinkedList

使用鏈表結構存儲數據,在插入和刪除元素時速度非常快。

LinkedList的特有方法:

① addFirst():開頭插入元素。

     addLast():結尾插入元素。

② removeFirst():刪除第一個元素,並返回被刪除的元素。

    removeLast():刪除最后一個元素,並返回被刪除的元素。

③getFirst():返回列表的第一個元素,不刪除。

   getLast():返回列表的最后一個元素,不刪除。

 


 

Set接口】

1、常用方法:與List接口基本相同。

但是,由於Set接口中的元素是無序的,因此沒有與下標相關的方法。

例如:get() remove() add()

 

2Set接口的特點:唯一、無序;

 

3HashSet 底層是調用HashMap的相關方法,傳入數據后,根據數據的HashCode進行散列運算,得到一個散列值后再進行運算,確定元素在列表中的位置。

 

HashSet如何確定一個對象是否相等?

先判斷對象的hashCode(),如果hashCode不同,那肯定不是一個對象。

     如果hashCode相同,那繼續判斷equals()方法;

重寫equals()方法。

 

所以,使用HashSet存儲實體對象時,必須重寫對象的hashCode() equals()兩個方法!!

 

4LinkedHashSet:在HashSet的基礎上,新增了一個鏈表。

用鏈表來記錄HashSet中元素放入的順序,因此使用迭代器遍歷時,可以按照放入的順序依次讀出元素。

 

5TreeSet:將存入的元素,進行排序,然后輸出。

如果存入的是實體對象,那么實體類必須實現Comparable接口,並重寫compareTo()方法。

或者,也可以在實例化TreeSet的同時,通過構造函數傳入一個比較器(一個實現了Comparator接口,並重寫了compare()方法的實現類的對象。

 

Set<person> set = new TreeSet<Person>(new Comparator(){

public int compare(Person p1,Person p2){

return p1.getId() - p2.getId();

}

});

 

Set<Person> set = new TreeSet<Person>(new Compare());

class Compare implements Comparator(){

//重寫compare方法

}

 

Comparable接口和Comparator接口的區別】

1Comparable由實體類實現,重寫comparTo()方法;

實體類實現Comparable接口以后,TreeSet使用空參構造即可

 

2Comparator需要單獨一個比較類進行實現,重寫Compare()方法。

實例化TreeSet的時候,需要傳入這個比較類的對象。

 


Map接口】

1Map接口特點:以鍵值對的形式存儲數據,以鍵取值。

鍵不能重復,值可以重復。

 

2Map接口的常用方法:

① put(key,value):向map的最后追加一個鍵值對;

② get(key):通過鍵,取到一個值;

③ clear():清除Map中的所有數據;

④ containsValue(obj):檢測是否包含指定的鍵

     containsKey(obj):檢測是否包含指定的鍵

 

HashMap Hashtable 的主要區別】

1Hashtable是線程安全的(線程同步),HashMap是線程不安全的(線程不同步);

2Hashtable的鍵不能為null,HashMap的鍵可以為null

3HashMap繼承了AbstractMapHashTable繼承Dictionary抽象類,兩者均實現Map接口。

4HashMap的初始容量為16Hashtable初始容量為11,兩者的填充因子默認都是0.75

5HashMap擴容時是當前容量翻倍即:capacity*2Hashtable擴容時是容量翻倍+1:capacity*2+1

 

LinkedHashMap

可以使用鏈表,記錄數據放入的次序,進入讓讀出的順序與放入的順序一致,與LinkedHashSet一樣。

 

TreeMap

根據鍵的順序,進行排序后,輸出。

如果傳入的是實體對象,必須重寫比較函數。詳見TreeSet

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM