HashMap排序总结

 

1、HashMap按键或按值排序

 

Map<String, Integer> map = new HashMap<String, Integer>();
map.put(
"d"2);
map.put(
"c"1);
map.put(
"b"1);
map.put(
"a"3);

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

//排序前
for (int i = 0; i < infoIds.size(); i++) {
    String id 
= infoIds.get(i).toString();
    System.out.println(id);
}
//d 2
//c 1
//b 1
//a 3

//排序
Collections.sort(infoIds, new Comparator<Map.Entry<String, Integer>>() {   
    
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {      
        
//return (o2.getValue() - o1.getValue()); 
        return (o1.getKey()).toString().compareTo(o2.getKey());
    }
}); 

//排序后
for (int i = 0; i < infoIds.size(); i++) {
    String id 
= infoIds.get(i).toString();
    System.out.println(id);
}
//根据key排序
//a 3
//b 1
//c 1
//d 2
//根据value排序
//a 3
//d 2
//b 1
//c 1
参考:http://www.cnblogs.com/lovebread/archive/2009/11/23/1609121.html

 

2、
HashMap<<HashMap<key,value>,value2> 

key,value,value2都是String类型

怎么按照相同的value排序啊
 
本来可以比较value是否相等,相等的放在一起,但是放到HashMap中顺序又乱了
c#中Dictionary不会这样
public class TreeMapSort {
    
    public static void main(String[] args){
        TreeMap<Entry<String,String>,String> tree = 
                new TreeMap<Entry<String,String>,String>(new Comparator<Entry<String,String>>(){
                    
                    /**
                     * 实现的compare方法,比较利用了String的compareTo,
                     * 如果V之间比较返回0,则比较K的值,如果两个都相等的时候,
                     * 在插入的时候视为重复的key值,将只会插入一个
                     */
                    @Override
                    public int compare(Entry<String, String> o1,
                            Entry<String, String> o2) {
                        int result = o1.getValue().compareTo(o2.getValue());
                        if(result != 0){
                            return result;
                        }else {
                            return o1.getKey().compareTo(o2.getValue());
                        }
                    }
                    
        }){
            /**
             * 
             */
            private static final long serialVersionUID = 1L;

            /**
             * 重写的toString方法,方便查看结果!
             */
            @Override
            public String toString(){
                return super.toString().replaceAll("[{}]", "")
                        .replaceAll(",", "\n").replaceAll("=", "\t");
            }
        };
        
        //插入测试数据!-------------------------------------------------------
        Map<String,String> map = new HashMap<String,String>();
        for(int i=1;i<=10;i++){
            map.put("key"+i, "value"+ i%3);
        }
        
        int count=1;
        for(Entry<String,String> e : map.entrySet()){
            tree.put(e, "a"+count);
            count++;
        }
        //测试数据插入完成-----------------------------------------------------
        
        System.out.println(tree);
    }
}


参考:http://topic.csdn.net/u/20111117/21/f5424ac8-8b54-40d7-a4bc-a640c3391822.html?2013879119

 

3、

HashMap是按照HashCode 排序,莫名其妙的顺序。
TreeMap是按照自身的顺序排序,比如数字的话,按照数字升序,ascII等。
LinkedHashMap是按照先进先出的顺序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值