【发布时间】:2015-09-01 21:43:50
【问题描述】:
我有以下哈希图:
Map<String,String> studentGrades = new HashMap<>();
studentGrades.put("Tom", "A+");
studentGrades.put("Jack", "B+");
Iterator<Map.Entry<String,String>> iterator = studentGrades.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<String,String> studentEntry = iterator.next();
System.out.println(studentEntry.getKey() + " :: " + studentEntry.getValue());
iterator.remove();
}
我认为iterator.remove(); 意味着将从HashMap 中删除某些内容,例如iterator.remove("Tom");,然后在迭代发生时将其从HashMap 中删除。
程序在iterator.remove(); 时编译并正确运行,但在iterator.remove("Tom"); 时发现错误。编译器说
必需:无参数并找到:java.lang.String 原因:实际参数列表和形式参数列表的长度不同。
有什么原因会发生这种情况,或者我的 iterator.remove(); 完全错了吗?
【问题讨论】:
-
您不能将字符串传递给 remove 方法,因为它不能那样工作。阅读 Iterator 的 Javadocs 以了解它的工作原理。
-
什么可以传递给 remove 方法?
-
嗯,答案很容易理解,而且从列表或任何您想要的数据集中删除实体,同时在其中循环,这也不是一个好主意。
-
我只是作为一种方式来显示所有结果(并迭代它们),在它们迭代时,删除一个然后在同一个循环中显示新结果
-
AntJavaDev
Iterator.remove()方法/API 正是用于在迭代时删除实体。过滤数据是一个常见的用例。
标签: java iterator hashmap hashtable