五.Set接口

1.通用

(1)Set接口的特點

  • 不允許存儲重複元素
  • 沒有索引,沒有帶索引的方法,也不能使用普通for循環遍歷

2.HashSet

(1)HashSet特點

  • 不允許存儲重複的元素
  • 沒有索引,沒有帶索引的方法,也不能使用普通的for循環遍歷
  • 是一個無序的集合,存儲元素的取出元素的順序有可能不一樣
  • 底層是一個哈希表結構(查詢的速度非常快)

(2)HashSet存儲自定義類型元素

  • Set集合要保證元素唯一(String,Integer...Student,Person),必須重寫hashCode方法和equals方法

3.哈希值

(1) 是一個十進制的整數,由系統隨機給出(就是對象的地址值,是一個邏輯地址,是模擬出來得到的地址,不是數據實際存儲的物理地址)
(2)int hashCode() 返回該對象的哈希碼值

4.Hash表(HashSet集合存儲數據的結構)

(1)jdk8之前:

  • 哈希表=數組+鏈表

(2)jdk8之後:

  • 哈希表=數組+鏈表
  • 哈希表-數組+紅黑樹(提高查詢的速度)

(3)哈希表的特點

  • 速度快

5.LinkedHashSet

(1)LinkedHashSet 繼承自 HashSet
(2)LinkedHashSet集合特點:

  • 底層是一個哈希表(數組+鏈表/紅黑樹)+鏈表:多了一條鏈表(記錄元素的存儲順序),保證元素有序
  • 並且不允許重複

6.可變參數

(1)可變參數:是JDK1.5之後出現的新特性
(2)使用前提:

  • 當方法的參數列表數據類型已經確定,但是參數的個數不確定,就可以使用可變參數

(3)使用格式:定義方法時使用

修飾符 返回值類型 方法名(數據類型...變量名){}

(4)可變參數原理:

  • 可變參數底層就是一個數組,根據傳遞參數個數不同,會創建不同長度的數組,用來存儲這些參數
  • 傳遞的參數個數,可以是0(不傳遞),1,2...多個

(5)示例

public static int sum(int...arr){
    int sum = 0;
    for(int i:arr){
        sum+=i;
    }
    return sum;
}

(6)可變參數的注意事項

  • 一個方法的參數列表,只能有一個可變參數
  • 如果方法的參數有多個,那麼可變參數必須寫在參數列表的末尾
public static int sum(String a,Double b,int...arr){
    int sum = 0;
    for(int i:arr){
        sum+=i;
    }
    return sum;
}

(7)可變參數的特殊寫法

public static void method(Object...obj){

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