Java addAll()中异常后的哈希集仍然为空
正如您所看到的,计划中存在一个IllegalArgumentException,但为什么在集合哈希集中甚至没有一个toAdd哈希集字符串?在toAdd HashSet中,set HashSet中的所有字符串是否都应该具有较低的null元素索引?如果向HashSet添加null值,迭代器将返回null值作为第一个元素。这就是为什么您只能看到第一个元素[s0]。您可以打印toAdd并测试它System.out.printlntoAdd.toStringaddAllCollection是java.util.AbstractCollection的方法,它不捕获任何异常。 当传递哈希集时,第一个元素为null。作为此执行,将对第一个null元素进行迭代Java addAll()中异常后的哈希集仍然为空,java,null,add,hashset,Java,Null,Add,Hashset,正如您所看到的,计划中存在一个IllegalArgumentException,但为什么在集合哈希集中甚至没有一个toAdd哈希集字符串?在toAdd HashSet中,set HashSet中的所有字符串是否都应该具有较低的null元素索引?如果向HashSet添加null值,迭代器将返回null值作为第一个元素。这就是为什么您只能看到第一个元素[s0]。您可以打印toAdd并测试它System.out.printlntoAdd.toStringaddAllCollection是java.ut
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]
因此不再发生迭代。没有添加任何元素
addAll方法详细信息:
throws IllegalArgumentException("Cannot add null to Set")
HashSet没有顺序,因此没有“索引”。是的,但必须有某种顺序才能添加字符串,所以集合中也应该有类似s1或s2的字符串。我打赌null值总是迭代器返回的第一个值。这可能是一种解释。@stonar96是的,您可以深入研究HashMap的源代码,看看迭代器如何返回值。似乎putForNullKey将条目放在地图的第一个存储桶中。
throws IllegalArgumentException("Cannot add null to Set")
public boolean addAll(Collection<? extends E> c) {
boolean modified = false;
Iterator<? extends E> e = c.iterator();
while (e.hasNext()) {
if (add(e.next()))
modified = true;
}
return modified;
}