我试图使用一些逻辑从TreeMap中删除一些条目。这是我的代码
TreeMap<String, Object> treeMap = someEntries();
Iterator<Entry<String, Object> iter = treeMap.entrySet().iterator();
Map.Entry<String, Object> entry = null;
while ((entry = iter.next()) != null) {
if (!entry.getKey().contains(search)) {
iter.remove();
}
}
获得例外: -
java.util.NoSuchElementException
at java.util.TreeMap$PrivateEntryIterator.nextEntry(TreeMap.java:1113)
at java.util.TreeMap$EntryIterator.next(TreeMap.java:1151)
at java.util.TreeMap$EntryIterator.next(TreeMap.java:1146)
那是什么例外?这是迭代期间的错误。还请建议我正确的方式。
答案 0 :(得分:1)
您应该使用Iterator#hasNext()
而不是Iterator#next()
进行核对:
while (iter.hasNext()) {
entry = iter.next();
if (!entry.getKey().contains(search)) {
iter.remove();
}
}
答案 1 :(得分:1)
您应该检查下一个元素:
TreeMap<String, Object> treeMap = someEntries();
Iterator<Entry<String, Object>> iter = treeMap.entrySet().iterator();
Entry<String, Object> entry;
while (iter.hasNext()) {
entry = iter.next();
if (!entry.getKey().contains(search)) {
iter.remove();
}
}
如果您在没有下一个元素时致电iter.next()
,则NoSuchElementException
会被抛出。
答案 2 :(得分:0)
当您遍历最后一个元素时,&#39; next&#39; point为NULL,因此当你走到最后时,你将得到NoSuchElementException。 使用以下代码进行尝试:
TreeMap<String, Object> treeMap = new TreeMap<String, Object>();
treeMap.put("a", 1);
treeMap.put("b", 2);
treeMap.put("c", 3);
treeMap.put("d", 4);
Iterator<Entry<String, Object>> iter = treeMap.entrySet().iterator();
Map.Entry<String, Object> entry = null;
while (iter.hasNext()) {
entry = iter.next();
System.out.println(entry.getKey());
if (!entry.getKey().contains("a")) {
iter.remove();
}
}
System.out.println("-----");
iter = treeMap.entrySet().iterator();
while (iter.hasNext()) {
entry = iter.next();
System.out.println(entry.getKey());
}