日期:2014-05-20  浏览次数:20844 次

HashMap排序
HashMap<<HashMap<key,value>,value2> 

key,value,value2都是String类型

怎么按照相同的value排序啊


<("key1", "value1"),"a">,  
<("key2", "value2"),"b">,  
<("key3", "value1"),"c">,  
<("key4", "value5"),"d">,  
<("key5", "value2"),"e">
排序后是这样  
<("key1", "value2"),"a">,  
<("key3", "value2"),"c">,  
<("key2", "value1"),"b">,  
<("key5", "value1"),"e">,  
 <("key4", "value5"),"d">


这样也可以

<("key2", "value1"),"b">,  
<("key5", "value1"),"e">,  
<("key1", "value2"),"a">,  
<("key3", "value2"),"c">,  
 <("key4", "value5"),"d">



就是里面的HashMap的值相等的话相邻放置

用其他映射也可以

------解决方案--------------------
楼主要搞清楚一个问题
<("key1", "value2"),"a">, 
这东西可不是HashMap<<HashMap<key,value>,value2> 哦
应该是HashMap<<Entry<key,value>,value2>才对
HashMap<key,value>可能有很多这样的键值对的,要按哪个排序呢?
------解决方案--------------------
你是要外面的那hashMap按照里面那个的value值来排序吗、、那也不用这么累人吧,最近谢个类,有一个key和value的属性,然后重写hashMap的排序方法就可以了啊,不用这么折磨人吧
------解决方案--------------------
只需要考虑里map的value值吗
外map的key value不需要考虑吗 如果是这样的话用compare可以
------解决方案--------------------
Java code

package com.test;

import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;

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);
    }
}