圖解集合,一目瞭然!
Collection(單列集合) Map(雙列集合) |--Collection(單列)
|--List(有序,可重複)
|--ArrayList
底層數據結構是數組,查詢快,增刪慢。
線程不安全,效率高。
|--Vector
底層數據結構是數組,查詢快,增刪慢。
線程安全,效率低。
|--LinkedList
底層數據結構是鏈表,查詢慢,增刪快。
線程不安全,效率高。
|--Set(可能無序,肯定唯一)
|--HashSet
底層數據結構是哈希表。
線程不安全,效率高。
怎麼保證唯一性的呢?
它依賴兩個方法:hashCode()和equals()
順序:
首先判斷hashCode()值是否相同。
同:繼續走equals(),看返回值
如果true:就不添加到集合。
如果false:就添加到集合。
不同:就添加到集合。
|--TreeSet
底層數據結構是二叉樹。
線程不安全,效率高。
怎麼保證唯一性的呢?是根據返回是否是0。
怎麼保證排序的呢?兩種方式
自然排序(元素具備比較性)
實現Comparable接口
比較器排序(集合具備比較性)
實現Comparator接口|--Map(雙列 底層結構是針對鍵有效,跟值無關)
|--HashMap
底層數據結構是哈希表。
線程不安全,效率高。允許null鍵和值
怎麼保證唯一性的呢?
它依賴兩個方法:hashCode()和equals()
順序:
首先判斷hashCode()值是否相同。
同:繼續走equals(),看返回值
如果true:就不添加到集合。
如果false:就添加到集合。
不同:就添加到集合。
|--Hashtable
底層數據結構是哈希表。
線程安全,效率低。不允許null鍵和值
怎麼保證唯一性的呢?
它依賴兩個方法:hashCode()和equals()
順序:
首先判斷hashCode()值是否相同。
同:繼續走equals(),看返回值
如果true:就不添加到集合。
如果false:就添加到集合。
不同:就添加到集合。
|--TreeMap
底層數據結構是二叉樹。
線程不安全,效率高。
怎麼保證唯一性的呢?是根據返回是否是0。
怎麼保證排序的呢?兩種方式
自然排序(元素具備比較性)
實現Comparable接口
比較器排序(集合具備比較性)
實現Comparator接口
Collection( 接口)單列集合 List( 接口)有序,不唯一 Set( 接口)可能無序,肯定唯一 Vector( 類) ArrayList( 類) LinkecList( 類) HashSet(類) TreeSet(類)1、底層數據結構是數組,查詢快,增刪慢 2、線程安全,效率低(只有Vector是線程安全的)1、底層數據結構是數組,查詢快,增刪慢 2、線程不安全,效率高1、底層數據結構是鏈表,增刪快,查詢慢 2、線程不安全,效率高1、底層數據結構是哈希表 2、通過重寫hashCode() 和equals() 保證唯一性3、線程不安全,效率高(如果元素相同不操作,所以不會覆蓋) 1、底層數據結構是二叉樹2、通過判斷compareTo或compare 方法的返回值是否爲 0來判斷是否重複3、排序有兩種方案:實現Comparable接口重寫 compareTo方法實現Comparator接口重寫 compare方法4、線程不安全,效率高(如果元素相同不操作,所以不會覆蓋)