日期:2014-05-18  浏览次数:20720 次

求IdentityHashMap顺序的问题,非常急!
我用了IdentityHashMap这个类,把相同的键值放进去,问题就来了,当我读取的时候这个map的时候,每次的顺序都不同,有什么办法可以让它来原来放进去的顺序原样输出?

Map map = new java.util.IdentityHashMap();
map.put("a",1);
map.put("b",2);
map.put("c",3);
map.put("a",4);

上面代码是每次读出来的顺序都有可能不一样.

------解决方案--------------------
LinkedHashMap解决你的问题
------解决方案--------------------
public class IdentityHashMapOperate
{
    public static IdentityHashMap addValue(IdentityHashMap map, String key, Object value)
    {
        if(map.get("sort").toString() == null)//没有顺序控制key
        {
            map.put("sort", key);//直接增加顺序控制key
            map.put(key, value);
        }
        else
        {
              String sort = map.get("sort").toString();//取出顺序控制key
              sort+= "^"+key;//需要控制顺序的key
              map.put("sort", sort);//回写到map
              map.put(key, value);
        }

        return map;
    }

    public static ArrayList getValues(IdentityHashMap map)
    {
        String sort = map.get("sort").toString();
        ArrayList values = new ArrayList();

        if(sort != null)
        { 
            String[] sortKeys = sort.split("\\^");

            for(int i = 0; i < sortKeys.length; i++)
            {
                values.add(map.get(sortKeys[i]));
            }
        }
        return values;
    }
}

大概如此了。
------解决方案--------------------
引用:
引用:使用的时候:
Map map = new java.util.IdentityHashMap();
map = IdentityHashMapOperate.addValue(map, "a", 1);//用这个类的方法来维护map
想获得顺序的值:
ArrayList list = IdentityHashMapO……


我看了看,确实有点问题,因为是直接在页面上敲的,但是思路已经很明确了,而且问题不大,你自己应该能调试出来的。
------解决方案--------------------
经过测试的新类:
package cn.com.medicon.test;

import java.util.ArrayList;