北京一特斯拉Model 3失控撞進公交站臺,司機:方向盤很重轉不動
阿新 • • 發佈:2020-10-20
集合
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