我对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");
}
}
}
答案 0 :(得分:2)
这不起作用:Map
基于哈希码和相等性检查;在计算哈希码时,数组不会注意它们的元素。这就是为什么你试图用作键的两个数组被认为是不同的。
您可以定义类ArrayKey
,在构造函数中放入一个数组,并定义使用数组元素的equals
和hashCode
。
答案 1 :(得分:2)
您使用的数组很难控制,因为AFAIK无法修改它的equals()
和hashCode()
。
答案 2 :(得分:1)
当你致电Map.containsKey()
时,它正在使用数组的.equals()
,它比较了2个对象。由于初始和目标是2个不同的数组,initial.equals(goal)
总是假的,即使数组的内容是相同的。
您可以做的是扩展Map并覆盖Map.containsKey()
以检查int [],并比较每个元素以确定相等。