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裏面的
相關文章
相關標籤/搜索