Chinaunix首页 | 论坛 | 博客
  • 博客访问: 362122
  • 博文数量: 100
  • 博客积分: 2586
  • 博客等级: 少校
  • 技术积分: 829
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-09 15:20
个人简介

我是一个Java爱好者

文章分类

全部博文(100)

文章存档

2014年(2)

2013年(7)

2012年(2)

2010年(44)

2009年(28)

2008年(17)

我的朋友

分类: Java

2010-10-27 16:29:38

首先简单说一下他们之间的区别:
 
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));
  }

如果要对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());
  }
 
 
eg.2 对HashMap(或Hashtable,LinkedHashMap)按照key的值升序:
 
List> mappingList = null;
  Map map = new HashMap();
  map.put("month", "month");
  map.put("bread", "bread");
  map.put("attack", "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.getKey().compareTo(mapping2.getKey());
   }
  });
  
  for(Map.Entry mapping:mappingList){
   System.out.println(mapping.getKey()+":"+mapping.getValue());
  }
阅读(1793) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2011-07-25 17:05:07

很好!帮我解惑了,收藏了!

chinaunix网友2010-10-28 18:19:19

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com