Java ArrayList和HashSet的區別 示例 1 : 是否有順序 ArrayList: 有順序 HashSet: 無順序 HashSet的具體順序,既不是按照插入順序,也不是按照hashcode的順序。 以下是 HasetSet源代碼 中的部分註釋 / It makes no guara ...
Java ArrayList和HashSet的區別
示例 1 : 是否有順序
ArrayList: 有順序
HashSet: 無順序
HashSet的具體順序,既不是按照插入順序,也不是按照hashcode的順序。
以下是HasetSet源代碼中的部分註釋
/**
* It makes no guarantees as to the iteration order of the set;
* in particular, it does not guarantee that the order will remain constant over time.
*/
不保證Set的迭代順序; 確切的說,在不同條件下,元素的順序都有可能不一樣
換句話說,同樣是插入0-9到HashSet中, 在JVM的不同版本中,看到的順序都是不一樣的。 所以在開發的時候,不能依賴於某種臆測的順序,這個順序本身是不穩定的
package collection;
import java.util.ArrayList;
import java.util.HashSet;
public class TestCollection {
public static void main(String[] args) {
ArrayList<Integer> numberList =new ArrayList<Integer>();
//List中的數據按照插入順序存放
System.out.println("----------List----------");
System.out.println("向List 中插入 9 5 1");
numberList.add(9);
numberList.add(5);
numberList.add(1);
System.out.println("List 按照順序存放數據:");
System.out.println(numberList);
System.out.println("----------Set----------");
HashSet<Integer> numberSet =new HashSet<Integer>();
System.out.println("向Set 中插入9 5 1");
//Set中的數據不是按照插入順序存放
numberSet.add(9);
numberSet.add(5);
numberSet.add(1);
System.out.println("Set 不是按照順序存放數據:");
System.out.println(numberSet);
}
}
示例 2 : 能否重覆
List中的數據可以重覆
Set中的數據不能夠重覆
重覆判斷標準是:
首先看hashcode是否相同
如果hashcode不同,則認為是不同數據
如果hashcode相同,再比較equals,如果equals相同,則是相同數據,否則是不同數據
package collection;
import java.util.ArrayList;
import java.util.HashSet;
public class TestCollection {
public static void main(String[] args) {
ArrayList<Integer> numberList =new ArrayList<Integer>();
//List中的數據可以重覆
System.out.println("----------List----------");
System.out.println("向List 中插入 9 9");
numberList.add(9);
numberList.add(9);
System.out.println("List 中出現兩個9:");
System.out.println(numberList);
System.out.println("----------Set----------");
HashSet<Integer> numberSet =new HashSet<Integer>();
System.out.println("向Set 中插入9 9");
//Set中的數據不能重覆
numberSet.add(9);
numberSet.add(9);
System.out.println("Set 中只會保留一個9:");
System.out.println(numberSet);
}
}
練習: 不重覆的隨機數
生成50個 0-9999之間的隨機數,要求不能有重覆的
答案 :
package collection;
import java.util.HashSet;
import java.util.Set;
public class TestCollection {
public static void main(String[] args) {
Set<Integer> numbers =new HashSet<>();
while(numbers.size()<50){
int i = (int) (Math.random()*10000);
numbers.add(i);
}
System.out.println("得到50個不重覆隨機數:");
System.out.println(numbers);
}
}