Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java addAll()中异常后的哈希集仍然为空_Java_Null_Add_Hashset - Fatal编程技术网

Java addAll()中异常后的哈希集仍然为空

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

正如您所看到的,计划中存在一个IllegalArgumentException,但为什么在集合哈希集中甚至没有一个toAdd哈希集字符串?在toAdd HashSet中,set HashSet中的所有字符串是否都应该具有较低的null元素索引?

如果向HashSet添加null值,迭代器将返回null值作为第一个元素。这就是为什么您只能看到第一个元素[s0]。您可以打印toAdd并测试它System.out.printlntoAdd.toString

addAllCollection是java.util.AbstractCollection的方法,它不捕获任何异常。 当传递哈希集时,第一个元素为null。作为此执行,将对第一个null元素进行迭代

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;
}