黑马程序员技术交流社区

标题: 怎么删除map集合中值相同的元素 [打印本页]

作者: 马儿不吃草    时间: 2016-4-19 22:51
标题: 怎么删除map集合中值相同的元素
map 中有{张三=3,李四=7,王五=9,刘六=5,田七=7,周七=3}这些元素,将map中value值相同的元素从该map集合中去掉

作者: 菊花爆满山    时间: 2016-4-20 00:54
是相同的值两个都删除,还是只删除重复的那一个
作者: wanbing522    时间: 2016-4-20 23:11
重写hashcode方法equals方法
作者: _eight_brother    时间: 2016-4-21 16:15
  1. public static void main(String[] args) {
  2.                 //创建集合,此处用LinkedHashMap是为了让添加的顺序与读取出的顺序一致
  3.                 Map<String,Integer> map=new LinkedHashMap<String,Integer>();
  4.                 //添加数据
  5.                 map.put("张三", 3);
  6.                 map.put("李四", 7);
  7.                 map.put("王五", 9);
  8.                 map.put("刘六", 5);
  9.                 map.put("田七", 7);
  10.                 map.put("周七", 3);
  11.                 //遍历数据
  12.                 for(Map.Entry<String, Integer> e:map.entrySet()){
  13.                         String key=e.getKey();
  14.                         Integer value=e.getValue();
  15.                         System.out.println("key:"+key+"\tvalue"+value);
  16.                 }
  17.                 System.out.println("-----华丽的分隔线-----");
  18.                 //创建一个set集合,利用它的元素唯一特性
  19.                 Set<Integer> set=new HashSet<Integer>();
  20.                 //遍历map集合
  21.                 Iterator<Entry<String, Integer>> it=map.entrySet().iterator();
  22.                 while(it.hasNext()){
  23.                         Entry<String, Integer> e=it.next();
  24.                         String key=e.getKey();
  25.                         Integer value=e.getValue();
  26.                         //关键操作
  27.                         if(!set.add(value)){//如果添加value不成功,说明重复了
  28.                                 //从map中删除该条记录
  29.                                 it.remove();
  30.                         }
  31.                 }
  32.                
  33.                 //遍历数据
  34.                                 for(Map.Entry<String, Integer> e:map.entrySet()){
  35.                                         String key=e.getKey();
  36.                                         Integer value=e.getValue();
  37.                                         System.out.println("key:"+key+"\tvalue"+value);
  38.                                 }
  39.         }
复制代码

作者: nc11111    时间: 2016-4-21 19:03
在创建人类的时候添加hashcode方法equals方法
作者: 马儿不吃草    时间: 2016-4-22 16:20
_eight_brother 发表于 2016-4-21 16:15

相同的值都删了,昨天参加点招面试就没上论坛
作者: 马儿不吃草    时间: 2016-4-22 16:21
nc11111 发表于 2016-4-21 19:03
在创建人类的时候添加hashcode方法equals方法

没有人类
作者: _eight_brother    时间: 2016-4-22 16:41
马儿不吃草 发表于 2016-4-22 16:21
没有人类

不理解你的意思,请说明"人类"的用处。
是在map中存储Person对象吗?
那map中的键值对的泛型是什么?
作者: 马儿不吃草    时间: 2016-4-22 19:29
菊花爆满山 发表于 2016-4-20 00:54
是相同的值两个都删除,还是只删除重复的那一个

相同的都删了
作者: 马儿不吃草    时间: 2016-4-22 19:30
_eight_brother 发表于 2016-4-22 16:41
不理解你的意思,请说明"人类"的用处。
是在map中存储Person对象吗?
那map中的键值对的泛型是什么? ...

不是,泛型就是<String,Integer>
作者: ssx337125845    时间: 2016-4-22 22:58
clear一下就好了
作者: taoshan    时间: 2016-5-6 08:09
map集合只针对建有效,通过建remove值
作者: My_Android    时间: 2016-5-25 10:09
遍历Map 通过键找值对象在equals 两个的值是不是相等,相等就删掉





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2