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. POJ 3041 Asteroids 最小覆盖数

    http://poj.org/problem?id=3041 题目大意: 一辆宇宙飞船在一个小行星带中,你知道,这很危险.他有一种武器,可以清除掉一行或一列的小行星.问把小行星全部清除最少的武器使用次 ...

  2. 【z12】&&【b092】hankson的趣味问题

    描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson.现 在,刚刚放学回家的 Hankson 正在思考一个有趣的问题. 今天在课堂上,老师讲解了 ...

  3. Oracle空间数据库的备份与恢复

    大型GIS系统,存储.管理海量(TB级)空间数据时,数据库备份变的尤其重要.这里随笔说说冷备份的一种方法. 基于ArcSDE.Oracle空间库的冷备份: (1) 在数据入库工作后或者更新变动较大时, ...

  4. [Node] Catch error for async await

    When we try to do MongoDB opration, mongoose return Promise, we can use async/await to simply the co ...

  5. Spring资源抽象Resource

    JDK操纵底层资源基本就是 java.net.URL .java.io.File .java.util.Properties这些.取资源基本是根据绝对路径或当前类的相对路径来取.从类路径或Web容器上 ...

  6. [RxJS] Replace zip with combineLatest when combining sources of data

    This lesson will highlight the true purpose of the zip operator, and how uncommon its use cases are. ...

  7. windows go 安装

    go的安装很简单,下载go的msi文件 这里提供go1.9的msi下载链接 https://www.lanzous.com/i2gb54d 直接全部next就行,默认安装在了c盘的go 然后配置环境变 ...

  8. IOS开发核心动画六:动画组

    #import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutl ...

  9. css 翻牌 翻转 3d翻转 特效

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. centos7 开启端口防火墙配置(如开启3306或者80端口)

    转载自https://blog.csdn.net/codepen/article/details/52738906 https://www.cnblogs.com/hantianwei/p/57362 ...