集合的一點小總結

集合

1.長度:動態擴容
2.內容:可以是基本數據類型,也可以是引用數據類型
3.元素:存儲的元素可以多元化,但是一般存儲的都是同一數據類型

  • Collection集合在這裏插入圖片描述

List和Set

區別:

  • List有序,而Set的存儲和取出都是無序的
  • List中的元素可以重複,而Set不行

List

  • ArrayList:增刪慢,查詢快,效率高,線程不安全
  • LinkedList:增刪快,查詢慢,效率高,線程不安全
  • Vector:增刪慢,查詢快,效率高,線程安全

所以,ArrayList更加偏向於需要查詢數據的存儲形式,因爲他的地址連續。

而LinkedList地址隨機,是基於鏈表的結構,所以在增刪上有很大的優勢。

在ArrayList的無參構造函數中,構造的長度不是一開始就爲10的,是第一個對象存儲進去之後,list的長度初始化爲10

Set

  • HashSet:底層是哈希表,存儲無序,且所有元素只能單一存在,效率高,線程不安全,靠的是hashCode()和equals()來判斷是否爲統一對象。
  • TreeSet:底層是二叉樹來實現的,所以在創建TreeSet對象時,需要重寫Comparable接口裏的CompareTo()方法
  • LinkedHashList:底層用鏈表和哈希表存儲,保證了存儲的順序,線程不安全,效率高

值得注意的是,因爲List是有序的,所以不僅可以用迭代,也可以用下標來遍歷,但是Set不行,因爲Set的存儲完全是無序的,所以只能通過迭代來遍歷

Map

Map用來保存具有映射關係的一對數據,分別是key和value,在這之中,key不能重複

HashMap

  • HashMap線程不安全
  • 可以放入null值的key或者value,但是key只能有一個爲null
  • key必須實現hashCode和equals的方法(因爲key的根本是一個set)
  • 因爲key其實是set存儲,所以也是不能保證鍵值對順序的
  • 不要使用可變對象作爲key值,因爲會導致hashCode的變化

HashTable

  • 線程安全
  • key和value中不能有空值
  • 效率較差
  • 同樣的和HashMap一樣,也是不能保證鍵值對的順序,並且在使用時必須實現對象的equals和hashCode方法

TreeMap

  • key的存儲其實是TreeSet,所以要按照TreeSet那一套來
  • 因爲是TreeSet存儲的key,所以他是能夠排序的,基本數據類型可以自然排序,自定義數據類型需要重寫comparable接口裏的compareTo方法