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里面的



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM