【2019.10.08】Java 集合、List、Set的用法

集合

集合框架

目標

  1. 使用集合存儲數據
  2. 遍歷集合,取數據
  3. 掌握每種集合的特性
  • List
  1. 有序的集合
  2. 允許存儲重複的元素
  3. 有索引,可以使用for循環遍歷
    • Vector
    • ArrayList
    • LinkedList
  • Set
  1. 不允許存儲重複元素

  2. 沒有索引(不能使用for循環遍歷)

    • TreeSet 無序
    • HashSet
    • LinkedHashSet 有序

Collection 接口

定義的是所有單列集合中共性的方法
所有單列集合都可以使用共性的方法
沒有帶索引的方法

學習頂層:學習頂層接口/抽象類中共性的方法
使用底層

共性的方法:
java.util.Collection 接口

  • add
  • clear
  • remove
  • contains
  • isEmpty
  • size
  • toArray

迭代器 Iterator

Java.util.Iterator

  • boolean hasNext()

  • E next()
    Iterator 迭代器是一個接口,需要使用實現類對象
    Iterator Iterator 返回在此Iterator 的迭代器

  • 使用步驟

  1. 使用集合中的Iterator()獲取迭代器的實現類對象,使用Iterator接口接受(多態)
  2. 使用Iterator接口中的方法hasNext判斷還有沒有下一個元素
  3. 使用Iterator接口中的方法next取出集合中的下一個元素
  • 增強for循環 for each
    遍歷集合和數組
    格式:
    for (集合/數組 的數據類型 變量名: 集合名/數組名){}

List

  • List接口的特點

    1. 有序的集合,存儲元素和取出元素的順序是一致的
    2. 有索引,包含了一些帶索引的方法
    3. 允許重複存儲元素
  • List接口帶索引的方法(特有)

    • add
    • get
    • remove
    • set
      注意:操作索引一定要防止索引越界異常
  • ArrayList:底層是數組,查詢快,增刪慢

  • LinkedList:有大量操作收尾元素的方法。底層是鏈表,查詢快,增刪慢
    注意:使用 LinkedList 特有方法,不能使用多態

  • Vector:可以實現可增長的對下對象數組 (單線程)

Set

有哈希表支持,不保證順序,不同步
哈希表 = 數組 + 鏈表
Set集合在調用add方法的時候會調用元素的hashCode方法和equals方法判斷元素是否重複
哈希表 = 數組 + 紅黑樹(提高查詢速度)

如果鏈表的長度超過了8位,那麼就會把鏈表轉換爲紅黑樹

  • 哈希表特點:

    • 查詢速度快
  • 特點java.util.Set

    • 不允許存儲重複元素:
    • 沒有帶索引的方法,也不能使用普通的for循環遍歷,使用迭代器或者增強for
  1. HashSet 實現了 Set接口

    • 不允許存儲重複元素
    • 沒有帶索引的方法,也不能使用普通的for循環遍歷
    • 是一個無序的集合,存儲元素和取出元素順序有可能不一樣
    • 底層是一個哈希表結構(查詢的速度特別快)
      使用HashCode 存儲自定義類型元素 必須重寫hashCode 和 equals 方法
  2. LinkedHashSet 繼承了 HashSet 集合

    • 底層是 哈希表(數組 + 鏈表/紅黑樹) + 鏈表:多了一套鏈表(記錄元素的存儲順序),保證元素有序
  • 可變參數

    • 可變參數的底層是一個數組,根據傳遞參數個數不同,會創建不同長度的數組,來存儲這些參數的參數個數
  • 排序 sort

    • 使用前提: 被排序集合裏面存儲的元素,必須實現 Comparable ,重寫接口中得方法 compareTo 定義排序的規則

Comparator 和 Comparable 區別

Comparable:自己(this)和別人(參數)比較,自己需要實現Comparable接口,重寫比較規則
Comparator:相當於找一個第三方的裁判來比較兩個人、重寫比較規則

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章