zoukankan      html  css  js  c++  java
  • Map去重,去重value相同的元素,保留key最小的那个值

    Map<Integer,String>,Integer代表时间撮,String代表文本信息
    去重函数:就是删除Map中value相同的元素,只保留key最小的那个元素

    public static Map<Integer,String> RemoveRepFromMap(Map<Integer,String> map){

      Set<Entry<Integer,String>> set = map.entrySet();
      List<Entry<Integer,String>> list = new ArrayList<Entry<Integer,String>>(set);

      Collections.sort(list,new Comparator<Entry<Integer,String>>(){
        //重载compare函数  对list集合进行排序,根据value值进行排序,
        public int compare(Entry<Integer,String> entry1,Entry<Integer,String> entry2){
          return Integer.valueOf(entry1.getValue().hashCode()-entry2.getValue().hashCode());
        }
      });

      for(int i=0;i<list.size();i++){//删除重复的元素
        Integer key = list.get(i).getKey();
        String value = list.get(i).getValue();

        int j=i+1;//map中的下一个
        if(j<list.size()){
          Integer next_key = list.get(j).getKey();
          String next_value = list.get(j).getValue();

          if(value == next_value){
          if(key.hashCode() < next_key.hashCode()){map.remove(next_key);list.remove(j);
          }else{
            map.remove(key);list.remove(i);
          }
          i--;
        }

      }
      return map;
    }

     Map<Integer,String>首先的特性就是:键key如果相同,将会把原来的key进行覆盖掉的,所以key一定不会重复

    几个函数的作用说明:

    Map.Entry
    表示单个映射关系即一个key+value


    entrySet()方法
    返回此映射中包含的映射关系的 set 视图集合,其实说白了就是 多个 key+value 的集合,
    解释下这里面的set,只有当key和value都一一对应相同的时候,才不会被重复计算【而这种情况根本就不会存到map里面去,因为他会覆盖原来的key】,如果key不同,键相同,依然是在entrySet里面的


  • 相关阅读:
    最优比率环 SPFA+二分
    严格次小生成树
    SPFA判断负环BFS+DFS
    poj 1149 PIGS 网络流-最大流 建图理解
    9.20开始的停课日常
    Speed
    [BZOJ4827][Hnoi2017]礼物(FFT)
    中山纪念中学集训日志
    [POJ1151][HDU1542]Atlantis(线段树,扫描线)
    [BZOJ2002][洛谷P3203][Hnoi2010]Bounce 弹飞绵羊(LCT维护链长)
  • 原文地址:https://www.cnblogs.com/wust221/p/5414566.html
Copyright © 2011-2022 走看看