[Day19]Collection接口中的子類(List集合、Set集合)


1.List接口

  1.1API總結

  (1)是一個元素存取有序的集合

  (2)是一個帶有索引的集合,通過索引可以精確的操作集合中的元素

  (3)集合中有可以重復的元素,通過元素的equals方法,來比較是否為重復的元素

  (4)List接口的常用子類:ArrayList集合、LinkedList集合

  1.2List接口中常用的方法

  (1)add(Object e):向集合末尾處添加指定的元素

  (2)add(int index,Object e):向集合指定索引處,添加指定的元素,原有元素依次后移

  (3)remove(Object e):將指定元素對象,從集合中刪除,返回值為被刪除的元素

  (4)remove(int index):將指定索引處的元素,從集合中刪除,返回值為被刪除的元素

  (5)set(int index,Object e):將指定索引處的元素,替換成指定的元素,返回值為替換前的元素

  (6)get(int index):獲取指定索引處的元素,並返回該元素

  1.3List集合3中遍歷方式

  (1)迭代器Iterator

  (2)for循環

  (3)加強for循環

  1.4 Iterator的並發修改異常

  (1)產生原因:在迭代過程中,使用了集合的方法對元素進行操作。導致迭代器不知道集合中的變化,易引發數據的不確定性

  (2)錯誤報告:java.util.ConcurrentModificationException

  (3)解決辦法:在迭代過程中,不使用集合的方法操作元素,通過ListIterator迭代器操作元素

  1.5List結合存儲數據的結構

  (1)堆棧-先進后出,棧的入口、出口都是棧的頂端位置

  (2)隊列-先進先出,隊列的入口、出口各占一側

  (3)數組-查找元素快:通過索引,可以快速訪問指定位置的元素

         增刪元素慢

  (4)鏈表-多個節點之間,通過地址進行連接

       查找元素慢,增刪元素快

  1.6ArrayList集合-數據存儲的結構是數組結構,元素增刪慢,查找快

  1.7LinkedList集合-數據存儲的結構是鏈表結構,方便元素添加、刪除的集合,LinkedList提供了大量首尾操作的方法

  1.8Vector集合-數據存儲的結構是數組結構,為JDK中最早提供的集合。Vector集合已被ArrayList替代

 

2.Set接口

  2.1Set接口

  (1)Set接口的集合中所存儲的元素是不重復的,是一個無序的集合

  (2)通過元素的equals方法,來判斷是否為重復元素

  2.2HashSet集合-此類實現Set接口,由哈希表支持。HashSet集合不能保證迭代順序和元素存儲順序相同

  (1)數據存儲方法

    采用哈希表結構存儲數據,保證元素唯一性的方法依賴於:hashCode()與equals()方法

  (2)哈希表

    將對象存放到數組中時,根據這些對象的特有數據結合相應的算法(hashCode方法),計算出這個對象在數組中的位置,然后將對象存放到數組中。

  (3)hashCode方法

    當向哈希表存放元素時,需要根據元素的特有數據結合相應的算法

  (4)HashSet存儲Java API中的類型元素

    給HashSet中存儲JAvaAPI中提供的類型元素時,不需要重寫元素的hashCode和equals方法,因為這兩個方法已經在Java中重寫完畢,如String類、Integer類

    給HashSet中存放自定義類型元素時,需要重寫對象中的hashCode和equals方法,建立自己的比較方式,才能保證HashSet集合中的對象唯一

  2.3LinkedHashSet

    HashSet子類,是鏈表和哈希表組合的一個數據存儲結構。保證元素的存入和取出的順序

  

3.判斷集合元素唯一的原理

  3.1ArrayList的contains方法

  (1)Boolean       contains(Object o)   如果此列表中包含指定的元素,則返回true

  (2)通過傳入的元素的equals方法依次與集合中的舊元素比較,根據返回值判斷

    自定義類型在未重寫equals方法前,判斷的依據是地址,想根據內容判斷需要重寫元素的equals方法

  3.2HashSet的add/contains等方法

  (1)boolean  add(E e)  如果此set中尚未包含指定元素,則添加指定元素

    set集合中不能存放重復元素,在添加過程中進行判斷,有則不添加,否則添加

  (2)boolean  contains(Object o)  如果此set包含指定元素,則返回true

   HashSet集合由於是無序的,其判斷唯一的依據是元素類型的hashCode和equals方法

   先判斷新元素與集合內已有的舊元素的hashCode值,不同添加,相同再判斷equals比較結果,不同添加。如果存儲自定義類型,需要重寫元素類的兩方法。

 

 

    

 

    


免責聲明!

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



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