Java 使用map检查是否包含数组。但不起作用
我有一个关于Java地图的问题。我使用map来包含数组,我想检查map是否包含我想要的数组。但它不起作用。是否仍要检查映射是否包含我想要的数组Java 使用map检查是否包含数组。但不起作用,java,arrays,map,Java,Arrays,Map,我有一个关于Java地图的问题。我使用map来包含数组,我想检查map是否包含我想要的数组。但它不起作用。是否仍要检查映射是否包含我想要的数组 import java.util.*; public class testContainKey{ static Map<int[],Integer> map = new HashMap<int[], Integer>(); public static void main(String args[]){ int[]
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");
}
}
}
import java.util.*;
公共类testContainKey{
静态映射映射=新的HashMap();
公共静态void main(字符串参数[]){
int[]首字母={1,2,3,4,5,6,7,8,9};
int[]目标={1,2,3,4,5,6,7,8,9};
map.put(目标,0);
if(map.containsKey(数组)){
System.out.println(“OK”);
}
否则{
System.out.println(“不工作”);
}
}
}
调用Map.containsKey()
时,它使用数组的.equals()
,比较两个对象。由于initial和goal是两个不同的数组,initial.equals(goal)
将始终为false,即使数组的内容相同
可以做的事情是扩展Map并覆盖
Map.containsKey()
以检查int[],并比较每个元素以确定相等性。当调用Map.containsKey()
时,它使用数组的.equals()
,它比较两个对象。由于initial和goal是两个不同的数组,initial.equals(goal)
将始终为false,即使数组的内容相同
您可以做的事情是扩展Map并覆盖
Map.containsKey()
以检查int[],并比较每个元素以确定相等性。这是行不通的:Map
基于哈希代码和相等性检查;数组在计算哈希代码时不注意其元素。这就是为什么您尝试用作键的两个数组被认为是不同的
您可以定义一个类
ArrayKey
,将一个数组放入构造函数中,并定义使用数组元素的equals
和hashCode
。这是行不通的:Map
基于哈希代码和相等检查;数组在计算哈希代码时不注意其元素。这就是为什么您尝试用作键的两个数组被认为是不同的
您可以定义一个类
ArrayKey
,将数组放入构造函数中,并定义使用数组元素的equals
和hashCode
。您将数组用作映射的键,这很难控制,因为您无法修改equals()
和hashCode())
。你正在使用一个数组作为地图的键,这个数组很难控制,因为你不能修改它的equals()
和hashCode()
。他在比较目标与目标,他从不把初始数组放在地图中他在比较目标与目标,他从不将初始数组放在可能重复的映射中