set接口的特點:
1、不允許存儲重複的元素
2、沒有索引,沒有帶索引的方法,也不能用for循環遍歷
java.util.HashSet集合,實現了Set接口
HashSet特點:
除了set接口的特點外,還增加了是一個無序的集合,存儲元素和取出元素的順序有可能不一致
底層是一個哈希表結構(查詢的速度非常快)
哈希值:是一個十進制的整數,由系統隨機給出(就是對象的地址值,是一個邏輯地址,不是數據儲存的物理地址)
在object類有一個方法,可以獲取對象的哈希值
public class Demo02 {
public static void main(String[] args) {
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(3);
set.add(2);
set.add(1);
//因爲不能使用for循環所以使用迭代器遍歷set集合
Iterator<Integer> it = set.iterator();
while (it.hasNext()){
Integer n = it.next();
System.out.println(n);
}
System.out.println(set);
}
set集合存儲元素不重複的原理是因爲重寫了HashCode方法和equals方法,首先比較兩個字符串的哈希值是否衝突,如果不衝突,就添加,如果哈希值衝突,再調用queals方法和哈希值相同的元素進行比較,如果返回false,則認定兩個兩個元素不同。
可變參數
可變參數是jdk1.5之後出現的新特性
適用前提:
當方法的參數列表數據類型已經確定,但是參數的個數不確定,就可以使用可變參數
格式:定義方法時
修飾符 返回值類型 方法名(數據類型...變量名){}
可變參數的原理:
可變參數底層就是一個數組,根據傳遞參數個數不同,會創建不同長度的數組,來存儲這些參數
傳遞的參數個數,可以是0個,N個。
比如說我們要定義一個方法計算三個整數int的和,我們可以
public static int adda(int a,int b,int c){
return a+b+c;
但是如果需求變了我們要計算N個整數int的和怎麼辦?這時候就可以使用可變參數
int i = addb(1,2,3);
System.out.println(i);
}
public static int addb(int...arr){
//定義一個初始化變量,記錄累加求和
int sum = 0;
//遍歷數組,獲取數組中的每一個元素
for (int i : arr) {
//累加求和
sum+=i;
}
//返回求和結果
return sum;
}
可變參數使用注意事項:
1、一個方法的參數列表只能有一個可變參數
2、如果方法的參數有多個,那麼可變參數必須寫在參數列表的末尾
public static void test(String b,double c,int d,int...a){}
可變參數的特殊(終極)寫法:
public static void test(Object...obj){}