简体   繁体   English

从TreeMap删除条目,获取java.util.NoSuchElementException

[英]Remove Entries From TreeMap, getting java.util.NoSuchElementException

I am trying to remove some entries from TreeMap using some logic. 我试图使用某些逻辑从TreeMap中删除一些条目。 This my code 这是我的代码

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

getting Exception:- 得到异常:

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)

What is that Exception? 那是什么例外? This is the error during iteration. 这是迭代过程中的错误。 Please also suggest me a right way. 也请建议我正确的方法。

You should be checking with Iterator#hasNext() not Iterator#next() like so: 您应该使用Iterator#hasNext()而不是Iterator#next()进行检查,如下所示:

while (iter.hasNext()) {
    entry = iter.next();
    if (!entry.getKey().contains(search)) {
        iter.remove();
    }
}

You should be checking for the next element like this: 您应该检查下一个元素,例如:

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

If you call iter.next() when there is no next element, the NoSuchElementException gets thrown. 如果在没有下一个元素时调用iter.next() ,则会引发NoSuchElementException

When you traverse to the last element, the 'next' point is NULL, so you will get NoSuchElementException when you go to the end. 当您遍历最后一个元素时,“下一个”点为NULL,因此当您结束时将获得NoSuchElementException。 Use the following code to have a try: 使用以下代码进行尝试:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM