使用map检查是否包含数组。但是不起作用

时间:2011-12-08 05:10:05

标签: java arrays map

我对Java地图有疑问。我使用map来包含数组,我想检查地图是否包含我想要的数组。但它不起作用。无论如何都要检查地图是否包含我想要的数组?

import java.util.*;

 public class testContainKey{
 static Map<int[],Integer> map = new HashMap<int[], Integer>(); 
  public static void main(String args[]){
   int[] initial={1,2,3,4,5,6,7,8,9};
   int[] goal = {1,2,3,4,5,6,7,8,9};
   map.put(goal,0);
   if(map.containsKey(array)){
    System.out.println("OK");
  }
   else{
     System.out.println("Not works");
   }
 }
}

3 个答案:

答案 0 :(得分:2)

这不起作用:Map基于哈希码和相等性检查;在计算哈希码时,数组不会注意它们的元素。这就是为什么你试图用作键的两个数组被认为是不同的。

您可以定义类ArrayKey,在构造函数中放入一个数组,并定义使用数组元素的equalshashCode

答案 1 :(得分:2)

您使用的数组很难控制,因为AFAIK无法修改它的equals()hashCode()

答案 2 :(得分:1)

当你致电Map.containsKey()时,它正在使用数组的.equals(),它比较了2个对象。由于初始和目标是2个不同的数组,initial.equals(goal)总是假的,即使数组的内容是相同的。

您可以做的是扩展Map并覆盖Map.containsKey()以检查int [],并比较每个元素以确定相等。