对Map排序

本节实例介绍对Map中的记录根据键进行排序,Map对象的键是Integer类型,排序结果可以是升序也可以是降序。

关键技术剖析:

只有TreeMap能够把保持的记录根据键排序,因此,可以把其他Map转换成TreeMap,转换的方法是把Map对象当做参数构造TreeMap。

TreeMap默认用升序排序,可以指定排序用的比较器。比较实现Comparator接口。

 

import java.util.Comparator;

import java.util.HashMap;

import java.util.Iterator;

import java.util.Map;

import java.util.Map.Entry;

import java.util.TreeMap;

 

public class SortMap1 {

  // 输出map

  private static void output(Map map) {

     // 第一种方法用 map.entrySet()遍历

     Iterator it = map.entrySet().iterator();

     while (it.hasNext()) {

        Map.Entry<Integer, String> s =(Entry<Integer, String>)it.next();

        int key = s.getKey();

        String value = s.getValue();

        //System.out.println("map的键是:"+key+",值是:"+value);

     }

 

     // 第二种方法用map.keySet()遍历

     it = map.keySet().iterator();

     while (it.hasNext()) {

        int key = (Integer) it.next();

        String value = (String) map.get(key);

        System.out.println("map的键是:" + key + ",值是:" + value);

 

     }

 

  }

 

  public static void main(String[] args) {

     Map map = new HashMap();

     map.put(new Integer(5), "aaa");

     map.put(new Integer(8), "bbb");

     map.put(new Integer(4), "ccc");

     map.put(new Integer(7), "ddd");

     map.put(new Integer(3), "eee");

     map.put(new Integer(1), "fff");

     System.out.println("初始化后的map");

     output(map);

  

     // 借助TreeMap的排序功能给mayMap排序

     Map treeMap = new TreeMap(map);

     System.out.println("排序后的map");

     output(treeMap);

  

     // 用自定义的比较器排序

     TreeMap newTreeMap = new TreeMap(new MyComparator());

     newTreeMap.putAll(map);

     System.out.println("用自定义的比较器排序后的map");

     output(newTreeMap);

  }

}

 //比较器

class MyComparator implements Comparator {

 

  @Override

  public int compare(Object o1, Object o2){

     int i1 = (Integer) o1;

     int i2 = (Integer) o2;

     if (i1 > i2) {

        return -1;

     }

     if (i1 < i2) {

        return 1;

     }

     return 0;

  }

}



http://blog.sina.com.cn/s/blog_93daad41010119di.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值