`
uule
  • 浏览: 6349171 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

Java中Map的排序

阅读更多

个人认为主要还是注意ArrayList( Collection c) 这个构造方法,然后对这个List排序即可!


public static void main(String[] args) {
		Map map = new HashMap();
		map.put("First", 20);
		map.put("Second", 10);
		map.put("Third", 30); 		
		
		List arrayList = new ArrayList(map.entrySet());
//注意构造函数	
         	//排序前
		for(Iterator it = arrayList.iterator();it.hasNext();){
			Map.Entry entry = (Map.Entry)it.next();
			System.out.print(entry.getKey()+":"+entry.getValue()+"  ");
		}
		Collections.sort(arrayList, new TariffComparator.TariffMapComparator());
		System.out.println();
		//排序后
		for(Iterator it = arrayList.iterator();it.hasNext();){
			Map.Entry entry = (Map.Entry)it.next();
			System.out.println(entry.getKey()+":"+entry.getValue());
		}
	}

 排序方法:

public class TariffComparator {
	
	public static class TariffMapComparator implements Comparator{

		public int compare(Object o1, Object o2) {
			Map.Entry obj1 = (Map.Entry)o1;
			Map.Entry obj2 = (Map.Entry)o2;			
			return obj1.getValue().toString().compareTo(obj2.getValue().toString());
		}
	}
}

 结果:


 

 

 

List dateList = new ArrayList(dateMap.entrySet());
			Collections.sort(dateList, new EmailComparator.MapComparator());


public static class ComparatorByKey implements Comparator{
		public int compare(Object o1, Object o2) {
			Map.Entry  m1 = (Map.Entry)o1;
			Map.Entry  m2 = (Map.Entry)o2;
			Integer i1 = (Integer)m1.getKey();
			Integer i2 = (Integer)m2.getKey();
			return i1.compareTo(i2);
		}		
	}

 

或:

public class TestMapSortByValue {

 

    public static void main(String[] args) {

        Map<String, Integer> map = new HashMap<String, Integer>();

        map.put("d",4);

        map.put("a",1);

        map.put("c",3);

        map.put("e",5);

        map.put("b",2);

        //排序前

        System.out.println("before sort");

        for(Map.Entry<String, Integer> entry:map.entrySet()){

            System.out.println(entry.getKey()+"->"+entry.getValue());

        }

        System.out.println();

         

        //将map转成list

        List<Map.Entry<String, Integer>> infos = new ArrayList<Map.Entry<String, Integer>>(map.entrySet());

        //对list排序,实现新的比较器

        Collections.sort(infos, new Comparator<Map.Entry<String, Integer>>(){

            @Override

            public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {

                return o1.getValue() - o2.getValue();

            }

        });

        //申明新的有序 map,根据放入的数序排序

        Map<String, Integer> lhm = new LinkedHashMap<String, Integer>();

        //遍历比较过后的map,将结果放到LinkedHashMap

        for(Map.Entry<String, Integer> entry:infos){

            lhm.put(entry.getKey(), entry.getValue());

        }

        //遍历LinkedHashMap,打印值

        System.out.println("after sort");

        for(Map.Entry<String, Integer> entry:lhm.entrySet()){

            System.out.println(entry.getKey()+"->"+entry.getValue());

        }

    }

}

 

 

法二:

很少有人会直接使用TreeMap,为什么,当你在TreeMap结构中“put”或“remove”元素时,因为需要排序从而需要一些开销,这会影响到程序的性能,一般是我们先使用HashMap组织好数据,当需要使用关键字排序的时候,再把HashMap作为参数传入. 
Map treeMap = new TreeMap(Map m). 
TreeMap是一个基本红黑树的实现,它会排序他的key. 

 

...

  • 大小: 9 KB
  • 大小: 4.6 KB
分享到:
评论
16 楼 liu504785352 2015-01-27  
滚粗,你们咋不去写啊。人家写了你们就喷啊。
15 楼 菜鸟小光子 2012-07-17  
你这个方法根本不行,我不知道你为什么好意思写出来。完全就是个垃圾方法。
14 楼 gerministar 2011-06-07  
jackra 写道
传说
SET是排序的
MAP是哈希的
LIST是序列的


set是无序的
map是key/value映射
list是有序的
13 楼 003 2011-06-06  
jackra 写道
传说
SET是排序的
MAP是哈希的
LIST是序列的

传说哥,太强悍了,哈哈
12 楼 徐风子 2011-06-03  
wuzaizhong283 写道
Morgan0916 写道
jackra 写道
传说
SET是排序的
MAP是哈希的
LIST是序列的


无语!!!

这样做东西,能用?以后各位考察初程要改改习惯了,别老ssh,啥啥框架的,外包害死人


set 是无序集合的说。
11 楼 wuzaizhong283 2011-06-03  
Morgan0916 写道
jackra 写道
传说
SET是排序的
MAP是哈希的
LIST是序列的


无语!!!

这样做东西,能用?以后各位考察初程要改改习惯了,别老ssh,啥啥框架的,外包害死人
10 楼 wuzaizhong283 2011-06-03  
 List arrayList = new ArrayList(map.entrySet());  
//注意构造函数      
            //排序前  
        for(Iterator it = arrayList.iterator();it.hasNext();){  
            Map.Entry entry = (Map.Entry)it.next();  
            System.out.print(entry.getKey()+":"+entry.getValue()+"  ");  
        }  
      [color=red]  Collections.sort(arrayList, new TariffComparator.TariffMapComparator());  [/color]
        System.out.println();  
        //排序后  
        for(Iterator it = arrayList.iterator();it.hasNext();){  
            Map.Entry entry = (Map.Entry)it.next();  
            System.out.println(entry.getKey()+":"+entry.getValue());  
        }  


哥们,你没有对Map排序呀,你就对List排个序,这个HashMap的key值该怎样还是怎样(无序的),看来上iteye以后只能看扯皮,口水和侃工资了。
9 楼 Morgan0916 2011-06-03  
jackra 写道
传说
SET是排序的
MAP是哈希的
LIST是序列的


无语!!!
8 楼 jackra 2011-06-03  
传说
SET是排序的
MAP是哈希的
LIST是序列的
7 楼 Morgan0916 2011-06-03  
基本概念没搞清楚啊

你仔细看看你的排序,其实是在对ArrayList的对象在排序,哪是在对Map排序啊。

而且你如果要自定义排序方式,应该用TreeMap,而不是HashMap。

几种map的区别,例子很多。

引用

HashMap,LinkedHashMap,TreeMap都属于Map

Map 主要用于存储键(key)值(value)对,根据键得到值,因此键不允许键重复,但允许值重复。
HashMap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为Null;允许多条记录的值为Null;HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致。如果需要同步,可以用Collections的synchronizedMap方法使HashMap具有同步的能力。

LinkedHashMap LinkedHashMap也是一个HashMap,但是内部维持了一个双向链表,可以保持顺序

TreeMap 不仅可以保持顺序,而且可以用于排序


http://www.cnblogs.com/modou/articles/1345995.html

6 楼 ~柳扬~ 2011-06-03  
对高手说是新手帖,对菜鸟说经验帖,有木有?有木有?
5 楼 fmjsjx 2011-06-03  
Map本来主要功能就不是为了遍历,所谓排序其实不是那么重要的,话说java.util.Collections#sort()方法的性能很差啊,特别当List的元素非常多的时候……其效率差到可以啊,记得有一次才几百条数据,整个方法居然用了近2秒,去掉排序就只用了不到200毫秒了………悲剧啊!
4 楼 猎头Sunny 2011-06-03  
论坛是做的不错。,被评为新手帖也是木有办法的事。很无奈呀,有木有,有木有!
3 楼 jackerxff 2011-06-03  
TreeMap 实现红黑树算法   还有其并发版本ConcurrentSkipListMap 使用跳跃表   应该都是Java底层中使用的非常困难的数据结构  如果能够原生实现一个(不借助于系统像Collections中的静态方法)使用简单的数据结构 还能保持高效  就可以赞一个
2 楼 freish 2011-06-03  
HashMap本就是无序的,想怎样?


不怕新手贴啊
1 楼 003 2011-06-02  
TreeMap有构造方法public TreeMap(Comparator<? super K> comparator),可以直接实现排序

相关推荐

    java实现的map排序

    Java中实现Map排序的方式主要有两种,一种是使用TreeMap,另一种是使用SortedMap接口。HashMap内部元素是无序的,它不会记录插入顺序,也不保证顺序。如果需要有序的Map,可以使用TreeMap,它会根据键的自然顺序进行...

    Java Map按键排序和按值排序

    Java Map按键排序和按值排序是Java编程语言中常用的数据结构之一。Map是一种键值对的集合,它可以按照键或值进行排序。下面,我们将详细地介绍Java Map的按键排序和按值排序。 按键排序(sort by key) Java中的...

    Java 对象属性map排序示例

    总结来说,Java中对Map进行排序通常涉及到HashMap与TreeMap的选择,以及Comparator的使用。对于对象属性Map的排序,需要先对Map进行排序,然后可能还要对对象列表进行排序。通过理解这些概念,开发者能够灵活地控制...

    java中Map集合的排序方法

    Map中元素存放是无序的 HashMap注意事项: 1,HashMap底层维护一个数组,我们向HashMap中所放置的对象实际上是存储在该数组当中; 2,当向HashMap中put一对键值时,它会根据key的hashCode值计算出一个位置,该位置...

    对于java map类排序

    总结来说,Java中的`Map`接口不能直接排序,但可以通过使用`SortedMap`接口的实现如`TreeMap`来实现排序。`TreeMap`可以根据键的自然顺序或提供的比较器对键进行排序。在给定的代码中,通过`mapSortByKey`方法实现了...

    Java Map 按值排序

    本文将详细介绍如何在Java中实现Map按值排序的几种方法。 1. 使用TreeMap TreeMap是Java中实现Map接口的一个类,它内部使用红黑树数据结构,可以按照键或值自然排序。如果我们要根据值排序,可以在创建TreeMap时...

    java Map转Bean Bean转Map Map排序

    java Map转Bean Bean转Map Map排序

    java map 集合 排序

    四、Map排序示例 1. 对于键排序: ```java for (Map.Entry, Integer&gt; entry : list) { System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue()); } ``` 2. 对于值排序: ```java ...

    java中map集合的用法

    Java中的Map接口是Java集合框架的重要组成部分,它用于存储键值对的数据结构,其中每个键都是唯一的,并且与一个值相关联。Map集合不同于List,因为它不维护元素的顺序,而是通过键来访问其对应的值。本文将详细介绍...

    Map参数按ASCII码排序

    将map按ASCII码排序,适用于将请求头的参数转为map,map内可再含有map,递归排序,无遗漏。运行demo里main方法即可进行验证。

    java中map集合的用法.doc

    Java中的Map接口是Java集合框架的重要组成部分,它用于存储键值对的数据结构。Map不同于List,List是以索引来访问元素,而Map则是通过键(key)来查找对应的值(value)。Map接口定义了一系列方法,使得我们可以对...

    java map实例,排序

    在Java编程语言中,Map接口是集合框架的重要组成部分,它提供了键值对的存储功能。在Java中,Map有多种实现类,每种实现类有不同的特性和用途。本篇文章将详细探讨`HashMap`, `LinkedHashMap`, `TreeMap`, 和 `...

    Java Map排序

    实现Map的排序功能,此文档针对Java开发,。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。...

    java中map的使用实例

    在Java编程语言中,Map接口是集合框架的重要组成部分,它提供了键值对(key-value pairs)的存储方式。Map不是列表或数组,而是允许我们通过一个键(key)来查找对应的值(value)。本篇文章将深入讲解Map的使用实例...

    java 集合分组与排序

    下面我们将深入探讨如何在Java中实现集合的分组与排序。 1. **集合分组**: 集合分组通常涉及到`GroupingBy`操作,这在Java 8引入的流(Stream)API中得到了很好的支持。`Collectors.groupingBy`方法允许我们将...

    对Map的key和value进行排序

    对Map的key和value进行排序是Java编程中非常重要的一部分。Map是Java集合框架中的一种数据结构,用于存储键值对。然而,在实际应用中,我们经常需要对Map中的key或value进行排序,以满足特定的业务需求。 对Map中的...

    Java中Map数据处理公共方法MapUtils

    Map是Java中最天才的设计,使用起来也很灵活,该类总结了Map通过key和value进行升序和降序排序,Map的两种遍历的公共方法以及上面功能的测试方法

    java中map集合的用法.pdf

    Java提供了多种Map实现,如HashMap、TreeMap、LinkedHashMap等,每种实现有不同的性能特性和排序规则。HashMap是无序的,基于哈希表实现;TreeMap是有序的,基于红黑树实现;LinkedHashMap保持插入顺序或者访问顺序...

    java中MAp介绍

    ### Java中的Map接口详解 #### 一、Map接口概述 Map接口是Java集合框架中的一个核心接口,它并不属于`Collection`接口体系。Map的主要功能是存储键值对(key-value pairs),其中键(key)不允许重复,而值(value...

Global site tag (gtag.js) - Google Analytics