SortedMap接口主要提供有序的Map实现。

Map的主要实现有HashMap,TreeMap,HashTable,LinkedHashMap。

TreeMap实现了SortedMap接口,保证了有序性。默认的排序是根据key值进行升序排序,也可以重写comparator方法来根据value进行排序。

HashMap与TreeMap的比较


  1. public class SortedMapTest2 {
  2. public static void main(String[] args) {
  3. Map<String,Object> hashMap = new HashMap<String,Object>();
  4. hashMap.put("1", "a");
  5. hashMap.put("5", "b");
  6. hashMap.put("2", "c");
  7. hashMap.put("4", "d");
  8. hashMap.put("3", "e");
  9. Set<Entry<String, Object>> entry = hashMap.entrySet();
  10. for(Entry<String, Object> temp : entry){
  11. System.out.println("hashMap:"+temp.getKey()+" 值"+temp.getValue());
  12. }
  13. System.out.println("\n");
  14. SortedMap<String,Object> sortedMap = new TreeMap<String,Object>();
  15. sortedMap.put("1", "a");
  16. sortedMap.put("5", "b");
  17. sortedMap.put("2", "c");
  18. sortedMap.put("4", "d");
  19. sortedMap.put("3", "e");
  20. Set<Entry<String, Object>> entry2 = sortedMap.entrySet();
  21. for(Entry<String, Object> temp : entry2){
  22. System.out.println("sortedMap:"+temp.getKey()+" 值"+temp.getValue());
  23. }
  24. }
  25. }

运算的结果为


  1. hashMap:1 值a
  2. hashMap:2 值c
  3. hashMap:3 值e
  4. hashMap:4 值d
  5. hashMap:5 值b
  6. sortedMap:1 值a
  7. sortedMap:2 值c
  8. sortedMap:3 值e
  9. sortedMap:4 值d
  10. sortedMap:5 值b

看上去还以为HashMap也保证了有序性,其实是随机的,如果值设置的复杂一点,如下例:


  1. public class SortedMapTest3 {
  2. public static void main(String[] args) {
  3. Map<String,Object> hashMap = new HashMap<String,Object>();
  4. hashMap.put("1b", "a");
  5. hashMap.put("2", "b");
  6. hashMap.put("4b", "d");
  7. hashMap.put("3", "c");
  8. hashMap.put("2b", "d");
  9. hashMap.put("3b", "c");
  10. Set<Entry<String, Object>> entry = hashMap.entrySet();
  11. for(Entry<String, Object> temp : entry){
  12. System.out.println("hashMap:"+temp.getKey()+" 值"+temp.getValue());
  13. }
  14. System.out.println("\n");
  15. SortedMap<String,Object> sortedMap = new TreeMap<String,Object>();
  16. sortedMap.put("1b", "a");
  17. sortedMap.put("2", "b");
  18. sortedMap.put("4b", "d");
  19. sortedMap.put("3", "c");
  20. sortedMap.put("2b", "d");
  21. sortedMap.put("3b", "c");
  22. Set<Entry<String, Object>> entry2 = sortedMap.entrySet();
  23. for(Entry<String, Object> temp : entry2){
  24. System.out.println("sortedMap:"+temp.getKey()+" 值"+temp.getValue());
  25. }
  26. }
  27. }

运算的结果是:


  1. hashMap:2b 值d
  2. hashMap:1b 值a
  3. hashMap:2 值b
  4. hashMap:3 值c
  5. hashMap:4b 值d
  6. hashMap:3b 值c
  7. sortedMap:1b 值a
  8. sortedMap:2 值b
  9. sortedMap:2b 值d
  10. sortedMap:3 值c
  11. sortedMap:3b 值c
  12. sortedMap:4b 值d

很显然只有TreeMap保证了有序性。

那如果想要根据value值来进行排序


  1. public class SortedMapTest {
  2. public static void main(String[] args) {
  3. SortedMap<String,String> sortedMap = new TreeMap<String,String>();
  4. sortedMap.put("1", "a");
  5. sortedMap.put("5", "b");
  6. sortedMap.put("2", "c");
  7. sortedMap.put("4", "d");
  8. sortedMap.put("3", "e");
  9. Set<Entry<String, String>> entry2 = sortedMap.entrySet();
  10. for(Entry<String, String> temp : entry2){
  11. System.out.println("修改前 :sortedMap:"+temp.getKey()+" 值"+temp.getValue());
  12. }
  13. System.out.println("\n");
  14. //这里将map.entrySet()转换成list
  15. List<Map.Entry<String,String>> list =
  16. new ArrayList<Map.Entry<String,String>>(entry2);
  17. Collections.sort(list, new Comparator<Map.Entry<String,String>>(){
  18. @Override
  19. public int compare(Entry<String, String> o1, Entry<String, String> o2) {
  20. // TODO Auto-generated method stub
  21. return o1.getValue().compareTo(o2.getValue());
  22. }
  23. });
  24. for(Map.Entry<String,String> temp :list){
  25. System.out.println("修改后 :sortedMap:"+temp.getKey()+" 值"+temp.getValue());
  26. }
  27. }
  28. }

运行结果为:


  1. 修改前 :sortedMap:1 值a
  2. 修改前 :sortedMap:2 值c
  3. 修改前 :sortedMap:3 值e
  4. 修改前 :sortedMap:4 值d
  5. 修改前 :sortedMap:5 值b
  6. 修改后 :sortedMap:1 值a
  7. 修改后 :sortedMap:5 值b
  8. 修改后 :sortedMap:2 值c
  9. 修改后 :sortedMap:4 值d
  10. 修改后 :sortedMap:3 值e

JAVA SortedMap接口的更多相关文章

  1. Java 数据类型:集合接口Map:HashTable;HashMap;IdentityHashMap;LinkedHashMap;Properties类读取配置文件;SortedMap接口和TreeMap实现类:【线程安全的ConcurrentHashMap】

    Map集合java.util.Map Map用于保存具有映射关系的数据,因此Map集合里保存着两个值,一个是用于保存Map里的key,另外一组值用于保存Map里的value.key和value都可以是 ...

  2. SortedMap接口:进行排序操作。

    回顾:SortedSet是TreeSet的实现接口,此接口可以排序. SortedMap接口同样可以排序,是TreeMap的实现接口,父类. 定义如下: public class TreeMap< ...

  3. SortedMap接口的实现类TreeMap介绍和实现Comparator自定义比较器(转)

    与SortedSet接口类似,SortedMap也是一个结构,待排序的Map,其一个比较常用的实现类是TreeMap. TreeMap的put(K key, V value)方法在每添加一个元素时,都 ...

  4. SortedMap接口

    SortedMap接口是排序接口,只要是实现了此接口的子类,都属于排序的子类,TreeMap也是此接口的一个子类. import java.util.Map; import java.util.Sor ...

  5. 深入理解Java的接口和抽象类(转)

    深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...

  6. 深入理解Java的接口和抽象类

    深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...

  7. java微信接口之五—消息分组群发

    一.微信消息分组群发接口简介 1.请求:该请求是使用post提交地址为: https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_t ...

  8. java微信接口之四—上传素材

    一.微信上传素材接口简介 1.请求:该请求是使用post提交地址为: https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token=A ...

  9. android 学习随笔二十七(JNI:Java Native Interface,JAVA原生接口 )

    JNI(Java Native Interface,JAVA原生接口) 使用JNI可以使Java代码和其他语言写的代码(如C/C++代码)进行交互. 问:为什么要进行交互? 首先,Java语言提供的类 ...

随机推荐

  1. sshfs 通过ssh 挂载远程目录

    安装:yum -y install sshfs 挂载远程 ssh 文件系统: sshfs -p 1234 root@192.168.1.218:/home/ /mnt/ sshfs -p SSH端口 ...

  2. Java Scheduler ScheduledExecutorService ScheduledThreadPoolExecutor Example(ScheduledThreadPoolExecutor例子——了解如何创建一个周期任务)

    Welcome to the Java Scheduler Example. Today we will look into ScheduledExecutorService and it's imp ...

  3. hdu 3416 Marriage Match IV (最短路+最大流)

    hdu 3416 Marriage Match IV Description Do not sincere non-interference. Like that show, now starvae ...

  4. C语言深度剖析-----多维数组和多维指针

    多维数组和多维指针 指向指针的指针 指针变量同样也有传址调用和传值调用 case1:估算要5个字节的空间,实际只用前面3个字节,设计释放空的2字节 case2:扩充到10字节 二维数组与二维指针 二维 ...

  5. Android 自己定义ViewGroup 实战篇 -&gt; 实现FlowLayout

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38352503 .本文出自[张鸿洋的博客] 1.概述 上一篇已经基本给大家介绍了怎 ...

  6. 在scala中调用java代码

      详细代码请见https://github.com/lujinhong/scalademo 在scala中调用java代替非常非常简单,直接调用即可 (一)一个简单示例 1.创建一个java类 pa ...

  7. js进阶 12-7 pageY和screenY以及clientY的区别是什么

    js进阶 12-7 pageY和screenY以及clientY的区别是什么 一.总结 一句话总结:pageY是距文件,screenY是获取显示器屏幕位置的坐标,clientY是页面视口. 没有滚动条 ...

  8. 结合Wireshark捕获分组深入理解TCP/IP协议栈之DNS协议

    摘要:     本文简单介绍了DNS协议理论知识,给出URL解析步骤,详细讲述了DNS报文各个字段含义,并从Wireshark俘获分组中选取DNS相关报文进行分析. 一.概述 1.1 DNS      ...

  9. 任哲<<μC/OS>>

    从第二章开始啦: 程序控制块(TCB)  重要概念  相当于对应程序块的学生证,学号,,, 上面的图是一个简单的程序控制块,还会有复杂的程序控制块,也许是嵌套的两级的: 链表就相当于老师手中的花名册, ...

  10. [Angular2] @Ngrx/store and @Ngrx/effects learning note

    Just sharing the learning experience related to @ngrx/store and @ngrx/effects. In my personal opinio ...