public void test(double sort[],Vector V)
{
Map map=new IdentityHashMap();
for(int k=0;k<sort.length;k++)
{
map.put(Double.toString(sort[k]),V.elementAt(k));
System.out.println(V.elementAt(k)+
"    "+sort[k]);
}
Arrays.sort(sort);
System.out.println("排序后");
for(int k=0;k<sort.length;k++)
{
System.out.println(map.get(Double.toString(sort[k]))+
"    "+sort[k]);
}
}

public static void main(String[] args)
{
Sort sort=new Sort();
double A[]={1111,34,123,34,123,34};
Vector V=new Vector();
V.addElement("测试1");
V.addElement("测试2");
V.addElement("测试3");
V.addElement("测试4");
V.addElement("测试5");
V.addElement("测试6");
sort.test(A,V);
}在进行map.get(Double.toString(sort[k]的输出时,为什么返回的为null,请教了??好像map的put方法中赋予A数组的值为null,不知道为什么???

解决方案 »

  1.   

    原因在你引用的IdentityHashMap上。
    此类利用哈希表实现 Map 接口,比较键(和值)时使用引用相等性代替对象相等性。换句话说,在 IdentityHashMap 中,当且仅当 (k1==k2) 时,才认为两个键 k1 和 k2 相等(在正常 Map 实现(如 HashMap)中,当且仅当满足下列条件时才认为两个键 k1 和 k2 相等:(k1==null ? k2==null : e1.equals(e2)))。 正是因为上面的原因(当且仅当 (k1==k2) 时,才认为两个键 k1 和 k2 相等),所以在你get
    的时候引用并不相等,即map.put(Double.toString(sort[k]),V.elementAt(k));和
    map.get(Double.toString(sort[k]))中的Double.toString(sort[k])并不是同一个
    引用,所以得到的是空值。换成HashMap就可以了。
    此类不是 通用 Map 实现!此类实现 Map 接口时,它有意违反 Map 的常规协定,该协定在比较对象时强制使用 equals 方法。此类设计仅用于其中需要引用相等性语义的罕见情况。 
      

  2.   

    map.put(Double.toString(sort[k]),V.elementAt(k));和
    map.get(Double.toString(sort[k]))中的Double.toString(sort[k])并不是同一个
    引用,所以得到的是空值。什么意思??并不是同一个引用???
      

  3.   

    就是不是一个对象,也就是用==判断时候是false,所以肯能你认为这两个key是相等的,但是内存中这两个对象并不相等。