论坛首页 入门技术论坛

Java中Map的排序

浏览 11561 次
该帖已经被评为新手帖
作者 正文
   发表时间:2011-06-02   最后修改:2011-06-02

个人认为主要还是注意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());
		}
	}
}

 结果:


...

  • 大小: 9 KB
  • 大小: 4.6 KB
   发表时间:2011-06-02  
TreeMap有构造方法public TreeMap(Comparator<? super K> comparator),可以直接实现排序
0 请登录后投票
   发表时间:2011-06-03  
HashMap本就是无序的,想怎样?


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

0 请登录后投票
   发表时间:2011-06-03  
传说
SET是排序的
MAP是哈希的
LIST是序列的
0 请登录后投票
   发表时间:2011-06-03  
jackra 写道
传说
SET是排序的
MAP是哈希的
LIST是序列的


无语!!!
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics