1. 程式人生 > 資訊 >北京一特斯拉Model 3失控撞進公交站臺,司機:方向盤很重轉不動

北京一特斯拉Model 3失控撞進公交站臺,司機:方向盤很重轉不動

集合



Collection(一組允許重複的物件)

list(允許重複,維護元素插入順序)有序可重複

  • list實現類:

    • ArrayList
    • LinkedList

set(重複元素不能加入)無序不重複

  • set實現類

    • HashSet
    • TreeSet
  • set不是真正的無序,只是集合中的排列順序和插入順序不一樣,只有當內容和地址資訊都相等時才會出現物件覆蓋

Map:複製物件,與Collection沒什麼關係

list:有序佇列,每個元素都有他的索引。第一個元素索引值是0,實現類還有Vector,Stack,一個是執行緒安全的ArrayList,一個是專門為了棧操作準備的,都不是不可替代的,不用他們都可以實現他們的效果,所以很少用

Set是一個不允許重複的集合

實現過程set和map是直接依賴相關的。

map是一個對映介面,AbstractMap是一個抽象類,HashMap,WeakHashMap,TreeMap都是AbstractMap的子類

Iterator介面是遍歷集合的工具

Collection的實現類都要實現

Iterator()函式,返回一個Iterator物件

ListIterator專門為了遍歷list存在的

介面方法:

Collection:add新增一個元素

addALL將指定集合中的所有元素新增目標集合中

contains判斷集合中是否包含這個元素

toArray返回一個表示該集合的陣列

重要實現類的細節

ArrayList

  • 動態陣列,有一個預設初始容量(10),隨著元素數量增加,每次新增會進行容量檢查,如果快要溢位,將會進行擴容操作,將陣列尺寸擴大為原來的1.5倍,所以在建立ArrayList時儘量預判一下容量尺寸,儘可能減少擴容操作帶來的額外開銷
  • ArrayList擅長隨機訪問,是非同步的

LinkedList

  • 雙向連結串列
  • 多出了addFirst,removeLast這種方法。因為雙向連結串列對首尾元素的操作效率更高,也是非同步的,

Vector

  • 就是一個執行緒安全的動態陣列

Stack

  • 繼承自Vector,實現了一個後進先出的棧,提供了一些額外方法來方便操作棧頂元素

HashSet

  • 可以存null,但只能存一個

  • 底層是一個HashMap

    • map中的key存set中的資料。
    • value存一個統一的object物件
  • 注意:HashSet雖然無序,但內部元素位置是固定的

  • HashSet判斷元素是否重複要考equals和hashcode一起

TreeSet

  • 有序集合,底層是TreeMap,
  • 非執行緒安全
  • 支援自然排序和定製排序
  • 通過compareTo方法來比較元素是否相等

LInkedHashSet

  • 繼承自HashSet,底層是LinkedHashMap
  • 根據元素的hashcode來決定元素真正的儲存位置
  • 同時再使用一個連結串列為何原色的次序。
  • 遍歷的時候看起來像是以插入順序排布的,實際並不是

HashMap

  • 以雜湊列表結構實現
  • 通過hash函式計算其位置
  • 內部定義了hash表陣列,元素通過雜湊轉換函式將元素的雜湊地址轉換成陣列中存放的索引,如果有衝突,使用雜湊連結串列的形式將所有相同雜湊地址的元素串起來
  • java.util.map.Entry是一個單鏈表結構

TreeMap

  • 有序的k-v集合,底層是一個紅黑樹,儲存時會進行排序,自然排序和定製排序,構造方法不同
  • 自然排序:key要實現Comparable介面
  • 定製排序:自己建立一個Comparator物件,可以對map中所有的key進行排序,不需要實現Comparable
  • 兩個key通過comparaTo方法返回0,認為這兩個key相等
  • 自己定義需要equals返回true,同時comparaTo方法返回0

Iterator介面詳細內容