【高分求助】有没有过滤掉hashmap中key不同,值相同的高效算法? 如题.本来想手动遍历过滤,但是不是会效率比较低?异或只能手动过滤?知道的帮个忙啊,谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你什么意思?即使说<1, "A">, <2, "B"> 过滤完了就只剩<1, "A">是吗? Map<String,String> hashMap = new HashMap<String, String>(); Iterator<String> iter = hashMap.keySet().iterator(); String compare = null; while (iter.hasNext()) { String key = iter.next(); String value = hashMap.get(key); if(value.equals(compare)){ hashMap.remove(key); } compare = value; }不知道楼主是不是这个意思? 没有API支持这个功能,所以你只能自己写一个了。key不同,value相同的过滤具体要看value的类型是什么,另外需求不明确,比如说key有1,2,3,value都相同,过滤最后选取哪个key呢,还是选取任意的key hashmap里不是有2个方法了吗? boolean containsKey(Object key) 测试指定对象是否为此表中的键。 boolean containsValue(Object value) 如果此映射将一个或多个键映射到指定值,则返回 true。 这个速度都不错了,自己写的话可能会很不好,建议你还是用ConcurrentHashMap吧,这个性能要好很多 谢谢大家回帖!TO zhujiahill我的key是String型,但value是一个bean,这样进行比较很麻烦,效率上来说就比较差了吧?TO:Ant_Yan取第一个key其他的丢弃。。TO: containsValue貌似不行。 Bean aaa= new Bean(); Bean bbb= new Bean(); map.put("1",aaa); map.put("2",bbb); map.put("3",a);要求是把key值是“2”的过滤掉。。 containsValue只要bean重写一下equals方法就可以了不过效率也只比自己写的遍历稍好些 自己写个 Map 继承自 HashMap,改写 put 方法,实现不允许把重复的 value 放入 Map。自己迭代判断的效率大同小异,不会有太大的提高的。 TO:sagezk谢谢回答,这样改写跟现在的在业务层处理貌似没多大区别吧。TO:fosjos这应该是一种可行的法子。。只是不知道可还有更好的办法了,现有的API中真没关注过这个问题吗? 正则表达式问题 输出两个数组的相同元素(用最优算法) GuI是什么?为什么说JAVA不适合做GUI? 前几天去一家国企面试,遇到了一道面试题 关于java读取ini的Api 基于j2ee的OA系统(项目日记) Applet中绘图后,如何监听鼠标动作并触发事件??? 简单问题::如何将BufferedImage对象直接显示在Label中或者是Panel中? 用JDBC连接ORACLE数据库出错?各位帮我看看该怎么处理。谢了 为什么结果不一样? 菜鸟求问有关combolist jar包资源文件
Iterator<String> iter = hashMap.keySet().iterator();
String compare = null;
while (iter.hasNext()) {
String key = iter.next();
String value = hashMap.get(key);
if(value.equals(compare)){
hashMap.remove(key);
}
compare = value;
}
不知道楼主是不是这个意思?
key不同,value相同的过滤具体要看value的类型是什么,另外需求不明确,比如说key有1,2,3,value都相同,过滤最后选取哪个key呢,还是选取任意的key
boolean containsKey(Object key)
测试指定对象是否为此表中的键。
boolean containsValue(Object value)
如果此映射将一个或多个键映射到指定值,则返回 true。
这个速度都不错了,自己写的话可能会很不好,
建议你还是用ConcurrentHashMap吧,这个性能要好很多
TO zhujiahill
我的key是String型,但value是一个bean,这样进行比较很麻烦,效率上来说就比较差了吧?TO:Ant_Yan
取第一个key其他的丢弃。。TO: containsValue貌似不行。 Bean aaa= new Bean();
Bean bbb= new Bean();
map.put("1",aaa);
map.put("2",bbb);
map.put("3",a);
要求是把key值是“2”的过滤掉。。
不过效率也只比自己写的遍历稍好些
谢谢回答,这样改写跟现在的在业务层处理貌似没多大区别吧。TO:fosjos
这应该是一种可行的法子。。只是不知道可还有更好的办法了,现有的API中真没关注过这个问题吗?