Set<String> set = new HashSet<String>() {
public boolean add(String arg0) {
if (arg0 == null) {
throw new IllegalArgumentException("Cannot add null to Set");
}
return super.add(arg0);
}
};
set.add("s0");
Set<String> toAdd = new HashSet<String>();
toAdd.add("s1");
toAdd.add("s2");
toAdd.add(null);
toAdd.add("s4");
toAdd.add("s5");
try {
set.addAll(toAdd);
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
System.out.println(set.toString());
這是我的代碼。我創建了一個HashSet
,您不能添加null,否則您將得到IllegalArgumentException
。然後,我將String
"s0"
添加到HashSet
,並且我創建了另一個HashSet
以使用addAll()
測試我的代碼,因爲addAll()
使用了add()
方法。addAll()中異常後仍爲空HashSet
輸出代碼:
java.lang.IllegalArgumentException: Cannot add null to Set
at testprogramm.TestProgramm$1.add(TestProgramm.java:17)
at testprogramm.TestProgramm$1.add(TestProgramm.java:1)
at java.util.AbstractCollection.addAll(Unknown Source)
at testprogramm.TestProgramm.main(TestProgramm.java:39)
[s0]
正如你可以看到有按計劃的IllegalArgumentException
但爲什麼會出現連一個也沒有String
在set
HashSet
的toAdd
HashSet
的? set
HashSet
中的所有字符串是否不應與toAdd
HashSet
中空元素的「索引」較低有關?
'HashSet'沒有訂單,所以沒有人指數「。 – Biffen 2014-12-05 17:00:15
是的,但必須有一種添加字符串的順序,所以在該集合中應該有像「s1」或「s2」這樣的字符串。 – stonar96 2014-12-05 17:01:52
我敢打賭,null值總是迭代器返回的第一個值。 – 2014-12-05 17:02:57