首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TreeMap力闭合

TreeMap力闭合
EN

Stack Overflow用户
提问于 2014-10-20 13:35:06
回答 1查看 159关注 0票数 0

我是TreeMap的新手。

我尝试了以下代码:

代码语言:javascript
复制
    for(Map.Entry<Integer,Integer> entry : MultiSelect_TreeMap.entrySet()) {
        int Books = entry.getValue();

        for(Map.Entry<Integer,Integer> entry2 : MultiSelect_TreeMap2.entrySet()) {
            int CalculatedBooks = entry2.getKey();
            int Books2 = entry2.getValue();
            int Pages = CalculatedBooks - (BooksPos * MaxPos);
            MySQLITE_DATABASE.DeleteIfExist(Books, Pages);
            if(Books == Books2) 
            {
                MultiSelect_LinkedList.add(Pages);
                MultiSelect_TreeMap.remove(CalculatedBooks);
                MultiSelect_TreeMap2.remove(CalculatedBooks);
            }
        }
    }

但我得到的力接近误差:

LogCat:

代码语言:javascript
复制
10-20 08:15:54.220: E/AndroidRuntime(764): FATAL EXCEPTION: main
10-20 08:15:54.220: E/AndroidRuntime(764): java.util.ConcurrentModificationException
10-20 08:15:54.220: E/AndroidRuntime(764):  at java.util.TreeMap$MapIterator.stepForward(TreeMap.java:883)
10-20 08:15:54.220: E/AndroidRuntime(764):  at java.util.TreeMap$EntrySet$1.next(TreeMap.java:924)
10-20 08:15:54.220: E/AndroidRuntime(764):  at java.util.TreeMap$EntrySet$1.next(TreeMap.java:922)
10-20 08:15:54.220: E/AndroidRuntime(764):  at test.project.MainActivity.DeleteAllSelectedNames(MainActivity.java:1012)
10-20 08:15:54.220: E/AndroidRuntime(764):  at test.project.MainActivity$15.onClick(MainActivity.java:1274)
10-20 08:15:54.220: E/AndroidRuntime(764):  at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166)
10-20 08:15:54.220: E/AndroidRuntime(764):  at android.os.Handler.dispatchMessage(Handler.java:99)
10-20 08:15:54.220: E/AndroidRuntime(764):  at android.os.Looper.loop(Looper.java:137)
10-20 08:15:54.220: E/AndroidRuntime(764):  at android.app.ActivityThread.main(ActivityThread.java:5103)
10-20 08:15:54.220: E/AndroidRuntime(764):  at java.lang.reflect.Method.invokeNative(Native Method)
10-20 08:15:54.220: E/AndroidRuntime(764):  at java.lang.reflect.Method.invoke(Method.java:525)
10-20 08:15:54.220: E/AndroidRuntime(764):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
10-20 08:15:54.220: E/AndroidRuntime(764):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-20 08:15:54.220: E/AndroidRuntime(764):  at dalvik.system.NativeStart.main(Native Method)

有人能告诉我我做错了什么吗?

非常感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-20 13:47:30

每个循环都不能从基础集合中删除项。您可以手动计数识别码。

代码语言:javascript
复制
for(int i = 0; i < MultiSelect_TreeMap.size(); i++){
//...
}

或者使用迭代器

代码语言:javascript
复制
Iterator<Entry<Integer, Integer>> it = MultiSelect_TreeMap.entrySet().iterator();

while(it.hasNext()){
    //...
    if (condition) {
        it.remove();
    }
}

编辑:我猜到了,你的实际用途可能是什么。下面的代码将从两个映射中删除条目,如果在mapA中有一个条目,则等于mapB中的一个条目。

代码语言:javascript
复制
Iterator<Entry<Integer,Integer>> it = mapA.entrySet().iterator();

while(it.hasNext()){
    Entry<Integer,Integer> entry = it.next();

    Integer calcBooks = entry.getKey();
    Integer books1 = entry.getValue();

    if(mapB.containsKey(calcBooks)){

        Integer books2 = mapB.get(calcBooks);

        if(books1.equals(books2)){
            mapB.remove(entry);
            it.remove();
        }
    }               
}

EDIT2:类强制转换错误与第一个问题没有直接关系。树状图通过比较来组织元素的顺序。因此,树的元素需要一个比较器

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26466968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档