关于IdentityHashMap可重复key的问题,大佬快点进来。

csdn_fuj 2017-04-25 03:21:21
我一个IdentityHashMap集合,里面存了很多元素。他们的key是重复的。value是唯一的对象。 我现在想按照value来移除里面的元素。 求大佬指点。 我代表全体员工对你表示感谢。
...全文
762 27 打赏 收藏 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
csdn_fuj 2017-04-26
  • 打赏
  • 举报
回复
引用 24 楼 qq_22656325 的回复:
[quote=引用 23 楼 csdn_fuj的回复:][quote=引用 22 楼 qq_22656325 的回复:] 这个map比较的是内存地址,也就是说不管值是不是相等,只有对象的引用是相等 才表示相同的key,也就是key1==key2为true的时候才意味着两个key重复 另外我比较奇怪,你既然能保证value不重复,为啥不用value当key...
额。。 我的key是房间编号。 类似于多对多的关系。 只是我这里要用集合做。 别管这个了。 能不能帮我想想怎么按照她的value来移除元素。 好急啊[/quote] 楼上的方法就差不多啊,根据你具体业务改改就能用[/quote] 恩恩,已经按照楼上的方法弄好了。谢谢了 老铁
csdn_fuj 2017-04-26
  • 打赏
  • 举报
回复
引用 21 楼 u012318873 的回复:
public class Utils {
    //你的项目里面是怎么去区别value相不相等的,这里我就比如Object是个学生,学号(int类型)相同则相同这个条件来做。你到时候改造一下
    public boolean removeByValues(IdentityHashMap<Integer,Object> map,Object o){
        for(Iterator<Map.Entry<Integer,Object>> it=map.entrySet().iterator();it.hasNext();){
            Object cur =  it.next();
            if(cur.getId() == o.getId()){
                it.remove();
                return true;
            }
        }
        return false;
    }
}
谢谢大兄弟。按照你给的方法 现在已经解决了。非常感谢。 谢谢老铁
皓月_银辉 2017-04-26
  • 打赏
  • 举报
回复
引用 23 楼 csdn_fuj的回复:
[quote=引用 22 楼 qq_22656325 的回复:] 这个map比较的是内存地址,也就是说不管值是不是相等,只有对象的引用是相等 才表示相同的key,也就是key1==key2为true的时候才意味着两个key重复 另外我比较奇怪,你既然能保证value不重复,为啥不用value当key...
额。。 我的key是房间编号。 类似于多对多的关系。 只是我这里要用集合做。 别管这个了。 能不能帮我想想怎么按照她的value来移除元素。 好急啊[/quote] 楼上的方法就差不多啊,根据你具体业务改改就能用
csdn_fuj 2017-04-26
  • 打赏
  • 举报
回复
引用 22 楼 qq_22656325 的回复:
这个map比较的是内存地址,也就是说不管值是不是相等,只有对象的引用是相等 才表示相同的key,也就是key1==key2为true的时候才意味着两个key重复 另外我比较奇怪,你既然能保证value不重复,为啥不用value当key...
额。。 我的key是房间编号。 类似于多对多的关系。 只是我这里要用集合做。 别管这个了。 能不能帮我想想怎么按照她的value来移除元素。 好急啊
LS1firesoar 2017-04-26
  • 打赏
  • 举报
回复
引用 24 楼 qq_22656325 的回复:
[quote=引用 23 楼 csdn_fuj的回复:][quote=引用 22 楼 qq_22656325 的回复:] 这个map比较的是内存地址,也就是说不管值是不是相等,只有对象的引用是相等 才表示相同的key,也就是key1==key2为true的时候才意味着两个key重复 另外我比较奇怪,你既然能保证value不重复,为啥不用value当key...
额。。 我的key是房间编号。 类似于多对多的关系。 只是我这里要用集合做。 别管这个了。 能不能帮我想想怎么按照她的value来移除元素。 好急啊[/quote] 楼上的方法就差不多啊,根据你具体业务改改就能用[/quote] 说对了,楼主是学生还是培训中?。
皓月_银辉 2017-04-25
  • 打赏
  • 举报
回复
这个map比较的是内存地址,也就是说不管值是不是相等,只有对象的引用是相等 才表示相同的key,也就是key1==key2为true的时候才意味着两个key重复 另外我比较奇怪,你既然能保证value不重复,为啥不用value当key...
_jant 2017-04-25
  • 打赏
  • 举报
回复
public class Utils {
    //你的项目里面是怎么去区别value相不相等的,这里我就比如Object是个学生,学号(int类型)相同则相同这个条件来做。你到时候改造一下
    public boolean removeByValues(IdentityHashMap<Integer,Object> map,Object o){
        for(Iterator<Map.Entry<Integer,Object>> it=map.entrySet().iterator();it.hasNext();){
            Object cur =  it.next();
            if(cur.getId() == o.getId()){
                it.remove();
                return true;
            }
        }
        return false;
    }
}
_jant 2017-04-25
  • 打赏
  • 举报
回复
public class Utils { //你的项目里面是怎么去区别value相不相等的,这里我就比如Object是个学生,学号(int类型)相同则相同这个条件来做。你到时候改造一下 public boolean removeByValues(IdentityHashMap<Integer,Object> map,Object o){ for(Iterator<Map.Entry<Integer,Object>> it=map.entrySet().iterator();it.hasNext();){ Object cur = it.next(); if(cur.getId() == o.getId()){ it.remove(); return true; } } return false; } } 这样就可以了
csdn_fuj 2017-04-25
  • 打赏
  • 举报
回复
引用 18 楼 u012318873 的回复:
[quote=引用 17 楼 u012318873 的回复:] 给你写了一个通过value删除的 你根据你项目简单改造一下
public class Utils {
    //你的项目里面是怎么去区别value相不相等的,这里我就比如Object是个学生,学号(int类型)相同则相同这个条件来做。你到时候改造一下
    public boolean removeByValues(IdentityHashMap<Integer,Object>  map,Object o){
        int deletekey = -1;
        for(Map.Entry<Integer,Object> entry : map.entrySet()){
            if(entry.getValue().getId() == o.getId()){
                deletekey = entry.getKey();
            }
        }
        if(deletekey != -1){
            map.remove(deletekey);
            return true;
        }
        return false;
    }
}
想了一下这样本质也是通过key来删除,也不行。 懵逼[/quote] 好急啊。 我也想不出来
_jant 2017-04-25
  • 打赏
  • 举报
回复
引用 17 楼 u012318873 的回复:
给你写了一个通过value删除的 你根据你项目简单改造一下
public class Utils {
    //你的项目里面是怎么去区别value相不相等的,这里我就比如Object是个学生,学号(int类型)相同则相同这个条件来做。你到时候改造一下
    public boolean removeByValues(IdentityHashMap<Integer,Object>  map,Object o){
        int deletekey = -1;
        for(Map.Entry<Integer,Object> entry : map.entrySet()){
            if(entry.getValue().getId() == o.getId()){
                deletekey = entry.getKey();
            }
        }
        if(deletekey != -1){
            map.remove(deletekey);
            return true;
        }
        return false;
    }
}
想了一下这样本质也是通过key来删除,也不行。 懵逼
_jant 2017-04-25
  • 打赏
  • 举报
回复
给你写了一个通过value删除的 你根据你项目简单改造一下
public class Utils {
    //你的项目里面是怎么去区别value相不相等的,这里我就比如Object是个学生,学号(int类型)相同则相同这个条件来做。你到时候改造一下
    public boolean removeByValues(IdentityHashMap<Integer,Object>  map,Object o){
        int deletekey = -1;
        for(Map.Entry<Integer,Object> entry : map.entrySet()){
            if(entry.getValue().getId() == o.getId()){
                deletekey = entry.getKey();
            }
        }
        if(deletekey != -1){
            map.remove(deletekey);
            return true;
        }
        return false;
    }
}
csdn_fuj 2017-04-25
  • 打赏
  • 举报
回复
引用 15 楼 u012318873 的回复:
[quote=引用 14 楼 csdn_fuj 的回复:] [quote=引用 13 楼 u012318873 的回复:] 我看了下,如果是这样的话,我大概理解楼主的意思了。究其原因是你自己理解有点偏差,在你自己的项目里,你认为的key相同,其实人家根本不相同。你可以把你项目里面那个key贴出来。或者你自己点进去看看,或者你自己比较一下。
相同的。 key绝对绝对相同的。 我项目里面集合的key是房间编号。 value是用户对象。 用户对象唯一。key不唯一 可重复[/quote] 你意思是你遍历出来,能出现2个相同的key,不同的value?[/quote] 对的。 IdentityHashMap就是这样子的啊、 我现在的问题是 如果我移除元素的话只能按照key移除。但是我一个key对应很多value。这样会删除掉其他的元素。但我只要删除一个元素。。 有啥办法
_jant 2017-04-25
  • 打赏
  • 举报
回复
引用 14 楼 csdn_fuj 的回复:
[quote=引用 13 楼 u012318873 的回复:] 我看了下,如果是这样的话,我大概理解楼主的意思了。究其原因是你自己理解有点偏差,在你自己的项目里,你认为的key相同,其实人家根本不相同。你可以把你项目里面那个key贴出来。或者你自己点进去看看,或者你自己比较一下。
相同的。 key绝对绝对相同的。 我项目里面集合的key是房间编号。 value是用户对象。 用户对象唯一。key不唯一 可重复[/quote] 你意思是你遍历出来,能出现2个相同的key,不同的value?
csdn_fuj 2017-04-25
  • 打赏
  • 举报
回复
引用 13 楼 u012318873 的回复:
我看了下,如果是这样的话,我大概理解楼主的意思了。究其原因是你自己理解有点偏差,在你自己的项目里,你认为的key相同,其实人家根本不相同。你可以把你项目里面那个key贴出来。或者你自己点进去看看,或者你自己比较一下。
相同的。 key绝对绝对相同的。 我项目里面集合的key是房间编号。 value是用户对象。 用户对象唯一。key不唯一 可重复
_jant 2017-04-25
  • 打赏
  • 举报
回复
我看了下,如果是这样的话,我大概理解楼主的意思了。究其原因是你自己理解有点偏差,在你自己的项目里,你认为的key相同,其实人家根本不相同。你可以把你项目里面那个key贴出来。或者你自己点进去看看,或者你自己比较一下。
csdn_fuj 2017-04-25
  • 打赏
  • 举报
回复
引用 11 楼 pany1209 的回复:
[quote=引用 10 楼 csdn_fuj 的回复:] [quote=引用 9 楼 pany1209 的回复:] [quote=引用 8 楼 csdn_fuj 的回复:] [quote=引用 7 楼 pany1209 的回复:] [quote=引用 6 楼 csdn_fuj 的回复:] [quote=引用 5 楼 pany1209 的回复:] [quote=引用 4 楼 csdn_fuj 的回复:] [quote=引用 1 楼 pany1209 的回复:] 有没有啥例子???
一个很奇怪的问题,我在我项目里面IdentityHashMap里面就可以存相同的key,但是我自己写例子的时候就不可以 会覆盖。这是为啥。。。 我的天。。。[/quote] IdentityHashMap的key比较的是地址。。。。即s1==s2才会覆盖[/quote] 私聊教我一下?好嘛?[/quote] 这个问题其实就是==和equals的区别了。。。即IdentityHashMap和HashMap判断key是否相等的区别[/quote] 我输出不来全部的你知道吗? 集合里面有相同的key他输出不来。只输出最后一个。 但是在我项目中又可以存在相同的key[/quote] 代码看看。。。。[/quote] 这个是测试项目里面的。 我自己项目里面是可以的[/quote] 你这个肯定覆盖啊,要用new Integer(1)...2..3,跟你说是==和equals的区别了[/quote] 那我要按照value移除元素怎么办
李德胜1995 2017-04-25
  • 打赏
  • 举报
回复
引用 10 楼 csdn_fuj 的回复:
[quote=引用 9 楼 pany1209 的回复:] [quote=引用 8 楼 csdn_fuj 的回复:] [quote=引用 7 楼 pany1209 的回复:] [quote=引用 6 楼 csdn_fuj 的回复:] [quote=引用 5 楼 pany1209 的回复:] [quote=引用 4 楼 csdn_fuj 的回复:] [quote=引用 1 楼 pany1209 的回复:] 有没有啥例子???
一个很奇怪的问题,我在我项目里面IdentityHashMap里面就可以存相同的key,但是我自己写例子的时候就不可以 会覆盖。这是为啥。。。 我的天。。。[/quote] IdentityHashMap的key比较的是地址。。。。即s1==s2才会覆盖[/quote] 私聊教我一下?好嘛?[/quote] 这个问题其实就是==和equals的区别了。。。即IdentityHashMap和HashMap判断key是否相等的区别[/quote] 我输出不来全部的你知道吗? 集合里面有相同的key他输出不来。只输出最后一个。 但是在我项目中又可以存在相同的key[/quote] 代码看看。。。。[/quote] 这个是测试项目里面的。 我自己项目里面是可以的[/quote] 你这个肯定覆盖啊,要用new Integer(1)...2..3,跟你说是==和equals的区别了
csdn_fuj 2017-04-25
  • 打赏
  • 举报
回复
引用 9 楼 pany1209 的回复:
[quote=引用 8 楼 csdn_fuj 的回复:]
[quote=引用 7 楼 pany1209 的回复:]
[quote=引用 6 楼 csdn_fuj 的回复:]
[quote=引用 5 楼 pany1209 的回复:]
[quote=引用 4 楼 csdn_fuj 的回复:]
[quote=引用 1 楼 pany1209 的回复:]
有没有啥例子???


一个很奇怪的问题,我在我项目里面IdentityHashMap里面就可以存相同的key,但是我自己写例子的时候就不可以 会覆盖。这是为啥。。。 我的天。。。[/quote]
IdentityHashMap的key比较的是地址。。。。即s1==s2才会覆盖[/quote]

私聊教我一下?好嘛?[/quote]
这个问题其实就是==和equals的区别了。。。即IdentityHashMap和HashMap判断key是否相等的区别[/quote]

我输出不来全部的你知道吗? 集合里面有相同的key他输出不来。只输出最后一个。 但是在我项目中又可以存在相同的key[/quote]
代码看看。。。。[/quote]




这个是测试项目里面的。 我自己项目里面是可以的
李德胜1995 2017-04-25
  • 打赏
  • 举报
回复
引用 8 楼 csdn_fuj 的回复:
[quote=引用 7 楼 pany1209 的回复:] [quote=引用 6 楼 csdn_fuj 的回复:] [quote=引用 5 楼 pany1209 的回复:] [quote=引用 4 楼 csdn_fuj 的回复:] [quote=引用 1 楼 pany1209 的回复:] 有没有啥例子???
一个很奇怪的问题,我在我项目里面IdentityHashMap里面就可以存相同的key,但是我自己写例子的时候就不可以 会覆盖。这是为啥。。。 我的天。。。[/quote] IdentityHashMap的key比较的是地址。。。。即s1==s2才会覆盖[/quote] 私聊教我一下?好嘛?[/quote] 这个问题其实就是==和equals的区别了。。。即IdentityHashMap和HashMap判断key是否相等的区别[/quote] 我输出不来全部的你知道吗? 集合里面有相同的key他输出不来。只输出最后一个。 但是在我项目中又可以存在相同的key[/quote] 代码看看。。。。
csdn_fuj 2017-04-25
  • 打赏
  • 举报
回复
引用 7 楼 pany1209 的回复:
[quote=引用 6 楼 csdn_fuj 的回复:] [quote=引用 5 楼 pany1209 的回复:] [quote=引用 4 楼 csdn_fuj 的回复:] [quote=引用 1 楼 pany1209 的回复:] 有没有啥例子???
一个很奇怪的问题,我在我项目里面IdentityHashMap里面就可以存相同的key,但是我自己写例子的时候就不可以 会覆盖。这是为啥。。。 我的天。。。[/quote] IdentityHashMap的key比较的是地址。。。。即s1==s2才会覆盖[/quote] 私聊教我一下?好嘛?[/quote] 这个问题其实就是==和equals的区别了。。。即IdentityHashMap和HashMap判断key是否相等的区别[/quote] 我输出不来全部的你知道吗? 集合里面有相同的key他输出不来。只输出最后一个。 但是在我项目中又可以存在相同的key
加载更多回复(7)

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧