依据guigui111111的建议:先把Map按Key从大到小排序,然后再把Key和Value互换。这也是一种非常好的思路,我写了一下代码,顺便贴上来,供大家參考与分享。

  1. package shuai.study.map;
  2.  
  3. import java.util.Comparator;
  4. import java.util.HashMap;
  5. import java.util.Iterator;
  6. import java.util.Map;
  7. import java.util.Map.Entry;
  8. import java.util.TreeMap;
  9.  
  10. /**
  11. * @author shengshu
  12. *
  13. */
  14. public class UniqueMap1 {
  15.  
  16. // Transfer to sorted Map
  17. public static Map<String, String> transferToSortedMap(Map<String, String> map) {
  18. // Define comparator for TreeMap
  19. // Note: Sort according to descending, because retain the smaller Key's record when exchanging Map's Key and Value
  20. Map<String, String> sort_map = new TreeMap<String, String>(new Comparator<String>() {
  21. @Override
  22. public int compare(String key1, String key2) {
  23. return key2.hashCode() - key1.hashCode();
  24. }
  25. });
  26.  
  27. sort_map.putAll(map);
  28.  
  29. return sort_map;
  30. }
  31.  
  32. // Exchange Map's Key and Value
  33. public static Map<String, String> exchangeMap(Map<String, String> map) {
  34. Map<String, String> exchange_map = new TreeMap<String, String>();
  35.  
  36. for (String key : map.keySet()) {
  37. String value = map.get(key);
  38.  
  39. exchange_map.put(value, key);
  40. }
  41.  
  42. return exchange_map;
  43. }
  44.  
  45. // Print Map
  46. public static void printMap(Map<String, String> map) {
  47. Iterator<Entry<String, String>> iterator = map.entrySet().iterator();
  48.  
  49. while (iterator.hasNext()) {
  50. Entry<String, String> entry = iterator.next();
  51.  
  52. String key = entry.getKey();
  53. String value = entry.getValue();
  54.  
  55. System.out.println(key + " --> " + value);
  56. }
  57. }
  58.  
  59. public static void main(String[] args) {
  60. Map<String, String> map = new HashMap<String, String>();
  61. map.put("A", "1");
  62. map.put("C", "3");
  63. map.put("D", "2");
  64. map.put("B", "3");
  65. map.put("E", "3");
  66.  
  67. // Sort Map by descending order
  68. // Note: Sort according to descending, because retain the smaller Key's record when exchanging Map's Key and Value
  69. Map<String, String> sort_map = UniqueMap1.transferToSortedMap(map);
  70.  
  71. // Exchange Key and Value for overlapping repetition record
  72. Map<String, String> exchange_map = UniqueMap1.exchangeMap(sort_map);
  73.  
  74. // Exchange Map for recovering Key and Value, this Map is what we want
  75. exchange_map = UniqueMap1.exchangeMap(exchange_map);
  76.  
  77. // Print Map
  78. UniqueMap1.printMap(exchange_map);
  79. }
  80. }

【方法2】删除Map中Value反复的记录,而且仅仅保留Key最小的那条记录的更多相关文章

  1. 【方法1】删除Map中Value反复的记录,而且仅仅保留Key最小的那条记录

    介绍 晚上无聊的时候,我做了一个測试题,測试题的大体意思是:删除Map中Value反复的记录,而且仅仅保留Key最小的那条记录. 比如: I have a map with duplicate val ...

  2. 删除oracle 表中重复数据sql语句、保留rowid最小的一条记录

    delete from tablename a where rowid > ( select min(rowid) from table_name b where b.id = a.id and ...

  3. 删除重复数据并保留id最小的一条记录

    delete from  test where id not in ( select a.id from (select min(id) as id from test group by form_i ...

  4. Map去重,去重value相同的元素,保留key最小的那个值

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

  5. Java之——删除ArrayList中的反复元素的2种方法

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47414935 ArrayList是Java中最经常使用的集合类型之中的一个.它同意 ...

  6. js删除map中元素

    js中删除map中元素后,map的长度不变,这时需要我们自己处理 delete vacc[0]; delete vacc[1]; ClearNullArr(vacc); //清除vacc中的null值 ...

  7. mysql删除表中重复数据,只保留一个最小的id的记录

    语句: delete from table1 where id not in (select minid from (select min(id) as minid from table1 group ...

  8. 初探oracle删除重复记录,只保留rowid最小的记录

    如题,初探oracle删除重复记录,只保留rowid最小的记录(rowid可以反映数据插入到数据库中的顺序) 一.删除重复记录可以使用多种方法,如下只是介绍了两种方法(exist和in两种). 1.首 ...

  9. oracle删除重复记录,只保留rowid最小的记录

    初探oracle删除重复记录,只保留rowid最小的记录   如题,初探oracle删除重复记录,只保留rowid最小的记录(rowid可以反映数据插入到数据库中的顺序) 一.删除重复记录可以使用多种 ...

随机推荐

  1. 从零开始PHP学习 - 第一天

    写这个系列文章主要是为了督促自己  每天定时 定量消化一些知识! 同时也为了让需要的人 学到点啥~! 本人技术实在不高!本文中可能会有错误!希望大家发现后能提醒一下我和大家! 偷偷说下 本教程最后的目 ...

  2. 基本数据结构简介--ath9k网卡驱动开发总结(二)

    ath9k驱动代码主要数据结构概览. (1)在ath9k的驱动中,几乎是最顶层的数据结构是ath_softc,这个数据结构几乎随处可见.ath_softc是硬件与MAC层进行交互的中间载体,很多有用的 ...

  3. IBM X System ServerGuide 8.41 服务器 系统安装 引导盘

    IBM X System ServerGuide 8.41 支持操作系统: 32位: Microsoft Windows 2003/2003 R2 (Enterprise, Standard, Web ...

  4. JAVA工具_PinyinConv

    package cn.chh.utils; /** * 获得每个字符的首字母 * @author CHH * @since 2013-01-21 * @bugs 不支持多音字处理 */ public ...

  5. C语言-字符编码转换:UTF与GB2312

    依赖库libiconv,libiconv库的交叉编译不做描述,网上很多 #include <stdio.h> #include <stdlib.h> #include < ...

  6. TLSAlloc()

    为什么要有TLS?原因在于,进程中的全局变量与函数内定义的静态(static)变量,是各个线程都可以访问的共享变量.在一个线程修改的内存内容,对所有线程都生效.这是一个优点也是一个缺点.说它是优点,线 ...

  7. jQuery.fn和jQuery.prototype jquery.extend() jquery.fn.extend()区别介绍

    这里的 jQuery , jQuery.fn , jQuery,fn,init ,jQuery,prototype 都代表什么. 来看下jQuery的源码是怎么样定义的: (function( win ...

  8. 获取考试成绩的sql语句

    as score,t_answer.id,t_answer.exams_name,t_answers.answer_id,t_answers.questions_id,t_answers.questi ...

  9. java 多线程学习笔记

    这篇文章主要是个人的学习笔记,是以例子来驱动的,加深自己对多线程的理解. 一:实现多线程的两种方法 1.继承Thread class MyThread1 extends Thread{ public ...

  10. iOS中的retainCount

    我们都知道iOS中采用引用计数的技术来管理内存,当一个对象没有任何一个地方引用的时候会自动释放,此时的retainCount为0,而且提供了一个-(NSInteger)retainCount的方法来获 ...