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){
}