java的集合

集合概述

javva集合大致可以分為Set、List、Queue、Map,四種體系。其中,Set代表無序、不可重復的集合;List代表有序、重復的集合;Map代表具有映射關(guān)系的集合;java5增加的Queue代表一種隊列集合實現(xiàn)。所有的集合類都位于java.util包下。

java的集合類主要由兩個接口派生出來:Collection和Map。
1.Collection集合體系的繼承樹.png

單列集合

java.util.Collection是單列集合的頂層父接口,它有2個常用的子接口:List和Set.
List集合中的元素有序,并且可以重復,元素有索引;Set集合中的元素無序,并且不可以重復(唯一),元素無索引。

  • Collection集合中的常用方法:

    • public boolean add(E e):把給定的對象添加到當前集合中
    • public void clear():清空集合中所有的元素
    • public boolean remove(E e):把給定的對象在當前集合中刪除
    • public boolean contains(Object obj):判斷當前集合中是否包含給定的對象
    • public boolean isEmpty():判斷當前集合是否為空
    • public int size():返回集合中元素的個數(shù)
    • public Object[] toArray():把集合中的元素,存儲到數(shù)組中
  • List集合除了有Collection中的常用方法外,還有以下常用方法:

    • public void add(int index, E element):將將指定的元素,添加到該集合中的指定位置上
    • public E get(int index):返回集合中指定位置的元素
    • public E remove(int index):移出列表中指定位置的元素,返回的是被移除的元素
    • public E set(int index, E element):用指定元素替換集合中指定位置的元素,返回值是更新前的元素。
  • LinkedList類除了擁有List接口中的方法,還有以下方法:

    • public void addFirst(E e):將指定元素插入此列表的開頭
    • public void addLast(E e):將指定元素添加到此列表的結(jié)尾
    • public E getFirst():返回此列表的第一個元素
    • public E getLast():返回此列表的最后一個元素
    • public E removeFirst():移除并返回此列表的第一個元素
    • public E removeLast():移除并返回此列表的最后一個元素
    • public E pop():從此列表所表示的堆棧處彈出一個元素。就是removeFirst()
    • public void push(E e):將元素推入此列表所表示的堆棧。就是addFirst()
  • Set集合,特點:元素無索引,元素不能重復,無序。常用的實現(xiàn)類有HashSet、LinkedHashSet(繼承了HashSet)、TreeSet。

  • HashSet

    • 特點是:不能保證元素的排列順序,順序可能與添加順序不同;HashSet不是同步的;集合元素值可以為null.
    • 存儲數(shù)據(jù)的結(jié)構(gòu)是哈希表結(jié)構(gòu),在jdk8以前是數(shù)組+鏈表;在jdk8以后:當鏈表元素個數(shù)沒有超過8個就是數(shù)組+鏈表,鏈表元素個數(shù)超過8個就是數(shù)組+鏈表+紅黑樹
    • 保證元素唯一的原理:主要依賴元素的hashCode()和equals()方法:
      1. 當集合存儲某個元素,就會調(diào)用該元素的hashCode()方法計算該元素的哈希值;
      2. 判斷該哈希值對應(yīng)的位置上,是否有相同哈希值的元素;
      3. 如果該位置上沒有相同哈希值的元素,那么久直接存儲
      4. 如果該位置上有相同哈希值的元素,那么就產(chǎn)生了哈希沖突
      5. 如果產(chǎn)生了哈希沖突,就會調(diào)用該元素的equals()方法與該位置上所有的元素一一進行比較:如果比較完成后,該位置上任意一個元素與該元素相等,那么就不存儲;如果比較完成后,該位置上沒有一個元素與該元素相等,那么就存儲
  • LinkedHashSet:繼承了HashSet,所以也是根據(jù)元素的hashCode值來決定元素的存儲位置,但它同事使用鏈表來維護元素的次序,這樣使得元素看起來是以插入順序保存的。是鏈表和哈希表組合的一個數(shù)據(jù)結(jié)構(gòu),依然不允許集合元素重復。

  • TreeSet:是Set接口的一個實現(xiàn)類,底層依賴于TreeMap,是一種基于紅黑樹的實現(xiàn)。

    • 特點是元素唯一,元素沒有索引,集合元素處于排序狀態(tài)。使用元素的自然順序?qū)υ剡M行排序(要求集合元素所屬的類必須實現(xiàn)Comparable接口,重寫compareTo方法,在其中書寫排序規(guī)則),或者根據(jù)創(chuàng)建TreeSet時提供的Comparator比較器進行排序,具體取決于使用的構(gòu)造方法??諈?gòu)造就是自然排序。有參構(gòu)造,參數(shù)就是比較器,是按比較器排序。

雙列集合

2.Map集合體系的繼承樹.png

Map<K, V> 接口:也稱Map集合,是所有雙列集合的頂層父接口。K用來限制鍵的類型,V用來限制值的類型。

  • Map集合特點:
    1. Map集合存儲元素是以鍵值對的形式存儲,也就是說每一個鍵值對都有鍵和值
    2. 通過鍵取值
    3. Map集合中的鍵不能重復,如果鍵重復了,那么值就會覆蓋
    4. Map集合中的值是可以重復的

Map接口中常用方法:

  1. public V put(K key, V value):把指定的鍵與指定的值添加到Map集合中,返回被替換的值,如果沒有就返回null
  2. public V remove(Object key):把指定的鍵 所對應(yīng)的鍵值對元素在Map集合中刪除,返回被刪除的元素的值
  3. public V get(Object key):根據(jù)指定的鍵,在Map集合中獲取對應(yīng)的值,沒有就返回null
  4. public boolean containsKey(Object key):判斷該集合中是否有此鍵
  5. public boolean containsValue(Object value):判斷該集合中是否有此值
  6. public int size():獲取集合中鍵值對的個數(shù)
  7. public Set<K> keySet():獲取Map集合中所有的鍵,存儲到Set集合中
  8. public Collection<V> values():獲取Map集合中所有的值,存儲到Collection集合中
  9. public Set<Map.Entry<K, V>> entrySet():獲取到Map集合中所有的 鍵值對對象 的集合(Set集合)。Entry<K, V>表示鍵值對對象類型。由于Entry<K, V>是Map接口的內(nèi)部接口,所以在外部使用的時候需要寫成Map.Entry<K, V> 。 (外部要方位成員內(nèi)部類:外部類.內(nèi)部類)。Entry中的常用方法:1、K getKey():獲取鍵值對對象包裝的鍵;2、V getValue():獲取鍵值對對象包裝的值

Map的遍歷:方式1、鍵找值;方式2、鍵值對方式
方式1:鍵找值方式

1. 獲取map集合中所有的鍵,keySet()方法
2. 遍歷獲取到的所有鍵
3. 根據(jù)鍵找值

方式2:根據(jù)鍵值對對象的方式

1. 獲取所有鍵值對對應(yīng)的所有鍵值對對象
2. 循環(huán)遍歷所有鍵值對對象
3. 使用鍵值對對象獲取鍵和值,getKey()和getValue() 

HashMap集合,根據(jù)hashCode和equals方法保證鍵唯一,類似于單列集合中的HashSet。

TreeMap集合,鍵唯一,可以對鍵值對進行排序。構(gòu)造方法TreeMap()是按照默認規(guī)則對鍵記性排序,要求鍵所屬的類實現(xiàn)Comparable接口,重寫compareTo方法,在該方法中書寫默認排序規(guī)則。構(gòu)造方法TreeMap(Comparator<? super K> comparator)是按照指定規(guī)則對鍵進行排序。類似于單列集合中的TreeSet。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 今天在看了好多個集合帖子后發(fā)現(xiàn)講的都是一半一半的,這下就逼死我這個強迫癥患者了.于是自己寫點,有不足之處還望各位道...
    迷迷糊糊m閱讀 255評論 0 0
  • 「我是大廠面試官」—— Java 集合,你肯定會被問到這些 文章收錄在 GitHub JavaKeeper ,N線...
    JavaKeeper_海星閱讀 444評論 0 1
  • Java集合總結(jié) 上圖有些錯誤,Deque是繼承Queue的,而不是Collection;且LinkedList沒...
    LJH_9442閱讀 331評論 0 1
  • 集合分類 Collection集合 單列集合, 直接存儲對象的引用 Map集合 雙列集合, 使用key-value...
    一介星辰閱讀 334評論 0 0
  • 集合框架體系概述 為什么出現(xiàn)集合類?方便多個對象的操作,就對對象進行存儲,集合就是存儲對象最常用的一種方法. 數(shù)組...
    acc8226閱讀 927評論 0 1

友情鏈接更多精彩內(nèi)容