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);rem

  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());
    }
  });get

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

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

      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;
}class

 Map<Integer,String>首先的特性就是:键key若是相同,将会把原来的key进行覆盖掉的,因此key必定不会重复List

几个函数的做用说明:map

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


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