Java对Map排序

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<String,String> map = new TreeMap<String,String>(new
Comparator<String>(){
   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<String> keySet =
map.keySet();
  Iterator<String> iter = keySet.iterator();

  while(iter.hasNext()){
   String key = iter.next();

   System.out.println(key+":"+map.get(key));
  }


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


eg.1 对TreeMap按照value值升序:


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


eg.2 对HashMap(或Hashtable,LinkedHashMap)按照key的值升序:


List<Map.Entry<String,String>> mappingList = null;
 
Map<String,String> map = new HashMap<String,String>();
 
map.put("month", "month");
  map.put("bread", "bread");
 
map.put("attack", "attack");
 
 
//通过ArrayList构造函数把map.entrySet()转换成list
  mappingList = new
ArrayList<Map.Entry<String,String>>(map.entrySet());
 
//通过比较器实现比较排序
  Collections.sort(mappingList, new
Comparator<Map.Entry<String,String>>(){
   public int
compare(Map.Entry<String,String> mapping1,Map.Entry<String,String>
mapping2){
    return
mapping1.getKey().compareTo(mapping2.getKey());
   }
  });

 
  for(Map.Entry<String,String> mapping:mappingList){

   System.out.println(mapping.getKey()+":"+mapping.getValue());

  }

本篇文章来源于:开发学院 http://edu.codepub.com  
原文链接:http://edu.codepub.com/2010/1030/26837.php

时间: 2024-08-25 18:46:37

Java对Map排序的相关文章

java Map排序(升序、降序、随机排序)

基础知识: 1 HashMap会使用key,根据hashcode进行默认排序. 2  LinkedHashMap根据存入先后进行排序 代码展示: 1 随机排序 java Map排序(升序.降序.随机排序),布布扣,bubuko.com

java按照Map值进行排序输出

package com.huawei.test; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; public class

Java的集合排序

前言:这几天碰到了一道算法题和一道面试题,问集合框架怎么排序的,有点懵逼. 1.比较器接口: Comparator<T>   接口  T - 此Comparator可以比较的对象类型   定义:强行对某个对象 collection 进行整体排序 的比较函数.可以将 Comparator 传递给 sort 方法(如 Collections.sort 或 Arrays.sort),从而允许在排序顺序上实现精确控制.还可以使用 Comparator 来控制某些数据结构(如有序 set或有序映射)的顺

Java中map接口 遍历map

java集合框架用于存储数据,也被称为集合类 位于java.util包下 java.util包下常用接口和类 Collection和Map是Java集合框架的根接口 List集合是有序集合,集合中的元素可以重复,访问集合中的元素可以根据元素的索引来访问. Set集合是无序集合,集合中的元素不可以重复,访问集合中的元素只能根据元素本身来访问(也是不能集合里元素不允许重复的原因). Map集合中保存Key-value对形式的元素,访问时只能根据每项元素的key来访问其value. Map接口 Map

java之Map源码浅析

Map是键值对,也是常用的数据结构.Map接口定义了map的基本行为,包括最核心的get和put操作,此接口的定义的方法见下图: JDK中有不同的的map实现,分别适用于不同的应用场景,如线程安全的hashTable和非线程安全的hashMap. 如下图是JDK中map接口的子类UML类图,其中有个特例Dictionary已经不建议使用: Map接口中的方法我们需要关注的就是get.put 和迭代器相关的方法如entrySet().keySet().values()方法. Entry 在开始分析

java中map有哪些

java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复. Hashmap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的.HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null;

java中Map,List与Set的区别

java中Map,List与Set的区别 目录(?)[+] Set,List,Map的区别 java集合的主要分为三种类型: Set(集) List(列表) Map(映射) 要深入理解集合首先要了解下我们熟悉的数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),而JAVA集合可以存储和操作数目不固定的一组数据. 所有的JAVA集合都位于 java.util包中! JAVA集合只能存放引用类型的的数据,不能存放基本数据类型. 简单说下集合和数组的区别:(参考文章:

Java中Map相关的快速查找算法与唯一性(转载)

原文地址:http://blog.csdn.net/chuyuqing/article/details/19629229 在对<Set和hashCode()>的一篇原创文章写完后,由于对自己的一些论断产生了模糊和怀疑,因此又对Set进行了一些研究,形成本篇. 在Set的使用场景中,我们不外乎看中了她存储数据的唯一性,即不能存储重复值,这在某些应用场合下是很必要的一个特性.那么从更深一层来考虑,Set究竟如何使数据不重复的呢?从另一个层面来考虑,她又如何确保在验证数据是否重复过程中的快速性呢?假

Java多线程 -- Map容器性能比较

单线程 单线程环境下可以使用HashMap和TreeMap.TreeMap上遍历返回结果是按照Key排序的. 测试方法 记录写入Map中N条记录的时间,单位毫秒. 记录从N条记录的Map中读取10W条记录的时间,单位毫秒. N=25W,50W,75W,100W 测试结果 写N条记录 25W  50W  75W  100W HashMap 28 49 72 92 TreeMap 131 321 527 748 N条记录中读10W数据 25W  50W  75W  100W HashMap 4 5