`
jackroomage
  • 浏览: 1200056 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

Java中对Map(HashMap,TreeMap,Hashtable等)的排序

 
阅读更多

Map hostpowerMap = new HashMap();
对HashMap(或Hashtable,LinkedHashMap)按照key的值升序:
(1)仅对Map中的value进行排序
 

       List list = new ArrayList(hostpowerMap.values());
        Collections.sort(list);

(2)对Map的键值对(key-value)整体进行排序
        List> mappingList = null;
        //通过ArrayList构造函数把map.entrySet()转换成list
        mappingList = new ArrayList>(hostpowerMap.entrySet());
        //通过比较器实现比较排序
        Collections.sort(mappingList, new Comparator>(){
           public int compare(Map.Entry mapping1,Map.Entry mapping2){
                    //return (o2.getValue() - o1.getValue()); 
                    return mapping1.getKey().compareTo(mapping2.getKey()); //按照key值升序
           }
          });
    //输出排序结果
     for(Map.Entry mapping:mappingList){ 
                System.out.println(mapping.getKey()+":"+mapping.getValue()); 
      }



如果要对TreeMap按照value的值进行排序,或者对HashMap,Hashtable,LinkedHashMap进行排序,则可以使用Map.Entry接口结合List实现:
eg.1 对TreeMap按照value值升序: 

List> mappingList = null; 
  Map map = new TreeMap(); 
  map.put("aaaa", "month"); 
  map.put("bbbb", "bread"); 
  map.put("ccccc", "attack"); 
  
  //通过ArrayList构造函数把map.entrySet()转换成list 
  mappingList = new ArrayList>(map.entrySet()); 
  //通过比较器实现比较排序 
  Collections.sort(mappingList, new Comparator>(){ 
        public int compare(Map.Entry mapping1,Map.Entry mapping2){ 
                return mapping1.getValue().compareTo(mapping2.getValue()); 
         } 
  }); 
  
  for(Map.Entry mapping:mappingList){ 
         System.out.println(mapping.getKey()+":"+mapping.getValue()); 
  }



Java中对Map(HashMap,TreeMap,Hashtable等)的排序时间 
首先简单说一下他们之间的区别: 

HashMap: 最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为Null(多条会覆盖);允许多条记录的值为 Null。非 
首先简单说一下他们之间的区别: 

HashMap: 最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为Null(多条会覆盖);允许多条记录的值为 Null。非同步的。 

TreeMap: 能够把它保存的记录根据键(key)排序,默认是按升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。TreeMap不允许key的值为null。非同步的。 

Hashtable: 与 HashMap类似,不同的是:key和value的值均不允许为null;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtale在写入时会比较慢。 

LinkedHashMap: 保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.在遍历的时候会比HashMap慢。key和value均允许为空,非同步的。 


TreeMap默认按key进行升序排序,如果想改变默认的顺序,可以使用比较器: 
Map map = new TreeMap(new Comparator(){ 
   public int compare(String obj1,String obj2){ 
    //降序排序 
    return obj2.compareTo(obj1); 
   } 
  }); 
  map.put("month", "The month"); 
  map.put("bread", "The bread"); 
  map.put("attack", "The attack"); 
  
  Set keySet = map.keySet(); 
  Iterator iter = keySet.iterator(); 
  while(iter.hasNext()){ 
   String key = iter.next(); 
   System.out.println(key+":"+map.get(key)); 
  }
分享到:
评论

相关推荐

    java中HashMap,LinkedHashMap,TreeMap,HashTable的区别

    java中HashMap,LinkedHashMap,TreeMap,HashTable的区别

    HashMap,HashTable,LinkedHashMap,TreeMap的区别

    HashMap,HashTable,LinkedHashMap,TreeMap的区别

    java map实例,排序

    java map排序,hashmap,linkedmap,treemap,hashtable

    Java Map 按照Value排序的实现方法

    Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。这篇文章主要介绍了Java Map 按照Value排序的实现方法,需要的朋友可以参考下

    Java集合框架完整说明便于了解集合

    java集合在日常开发中经常用到,对基础的掌握尤其重要,其中List,Set,Map的作用以及使用的场景和分类描述,其中Arraylist 与 LinkedList 区别,HashSet与TreeSet与LinkedHashSet对⽐,LinkedHashMap和HashMap,...

    集合框架包含collection和map的子类

    集合框架包含collection和map的子类。其中collection包含list、set和queue。map包括hashmap、hashtable和treemap

    Android 对Map按key和value分别排序的实例

    Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。 TreeMap:基于红黑树(Red-Black tree)的 NavigableMap 实现,该映射根据其键的自然顺序进行排序,或者根据创建映射...

    HashMap-面试必过

    1.说一下 HashMap 的实现原理? 2.HashMap在JDK1.7和JDK1.8中有哪些不同?...16.如何决定使用 HashMap 还是 TreeMap? 17.HashMap 和 ConcurrentHashMap 的区别? 18.ConcurrentHashMap 和 Hashtable 的区别?

    Java 最常见的 208 道面试题:第二模块答案

    21. HashMap 和 Hashtable 有什么区别? 22. 如何决定使用 HashMap 还是 TreeMap? 23. 说一下 HashMap 的实现原理? 24. 说一下 HashSet 的实现原理? 25. ArrayList 和 LinkedList 的区别是什么? 26. 如何实现...

    实验05 Java集合.doc

    4)了解Map接口及主要实现类(HashMap、TreeMap、HashTable) 二、实验内容及步骤 1、编写程序练习将以下5个Person类的对象放在一个HashSet中。 姓名:张三 身份证号:178880001 姓名:王五 身份证号:178880002 ...

    Java 基础核心总结 +经典算法大全.rar

    HashMap LinkedHashMap TreeMap WeakHashMap Hashtable Collection 集合体系详解 Set 接口 AbstractSet 抽象类SortedSet 接口HashSet LinkedHashSet TreeSet List 接口 AbstractList 和 AbstractSequentialList ...

    collection,map的区分

    Collection,Map,HashMap,hashTable,TreeMap,List,Vector,ArrayList的区别2008-03-30 13:27 这几天这个论坛还处在各个方法的设计阶段,也写了一部分,现在又遇到了这样的问题,怎么保存大量对象。。。的,查了...

    【后端】java基础(4.4)java中级基础之集合——Map

    Map虽然也叫集合,但是它却不是Collection的子接口。它的底层结构是链表散列,也...HashMap map = new HashMap<>(); map.put("name", "大妖怪"); map.put("age", "100"); 复制代码 查询元素:get(key) HashMap m

    java8源码-JavaRobot:Java学习笔记,JavaLearningNote

    学习笔记(持续更新中) 所有文章均同步发布到微信公众号【JavaRobot】,关注微信公众号,及时得到文章推送,谢谢支持。 说明:如无特别说明,所有代码都基于JDK8 JavaSE(Java基础) Java Core 关键字 synchronized...

    java遍历特例

    java Map 遍历方法 Map map = new HashMap(); Iterator it = map.entrySet().iterator(); while (it.hasNext()) { Map.Entry entry = (Map.Entry) it.next(); Object key = entry.getKey(); ...

    Java集合教程吐血整理干货.md

    java集合 线程不安全的集合 HashMap的特点 HashMap的长度(容量)为什么要设计成2的幂? HashTable的特点 TreeMap ArrayList的特点 Vector的特点 LinkedList的特点 Set ConcurrentModificationException异常 线程...

    java源码整理包-集合

    java源码整理包:list,map,ArrayList,HashMap,HashSet,Hashtable,TreeMap,TreeSet,Vector等源码包分享

    Java集合框架源码剖析:HashSet 和 HashMap

     HashMap实现了Map接口,允许放入null元素,除该类未实现同步外,其余跟Hashtable大致相同,跟TreeMap不同,该容器不保证元素顺序,根据需要该容器可能会对元素重新哈希,元素的顺序也会被重新打散,因此不同时间...

    java jdk实列宝典 光盘源代码

    java为数据结构中的映射定义一个接口java.util.Map,有四个实现类HashMap Hashtable LinkedHashMap TreeMap用法和区别;对Map排序; 5字符串 使用String;判断一个字符串是否是合法的java标识符;使用StringBuffer;...

    实验七:Java集合与泛型

    了解了解List接口及主要实现类(ArrayList、LinkedList、Vector),掌握ArrayList的使用及其与Vector的区别,了解了Map接口及主要实现类(HashMap、TreeMap、HashTable),掌握了掌握HashMap的使用及与HashTable的...

Global site tag (gtag.js) - Google Analytics