Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有办法在对象键上使用containsKey()映射函数?_Java_Arrays_Hashmap - Fatal编程技术网

Java 有没有办法在对象键上使用containsKey()映射函数?

Java 有没有办法在对象键上使用containsKey()映射函数?,java,arrays,hashmap,Java,Arrays,Hashmap,我有一个hashmap,其中的条目包含一个整数数组作为键,一个整数作为值。将entires添加到hashmap时,我创建整数数组变量,然后在hashmap.put()调用中使用变量名。问题是,我稍后需要搜索hashmap键以查看给定的整数数组键是否存在,但是hashmap.containsKey()调用始终返回false,因为hashmap包含对整数数组的引用,而不是实际的显式整数数组 有没有一种简单的方法可以使用给定的整数数组搜索hashmap 以下是代码片段: public static v

我有一个hashmap,其中的条目包含一个整数数组作为键,一个整数作为值。将entires添加到hashmap时,我创建整数数组变量,然后在hashmap.put()调用中使用变量名。问题是,我稍后需要搜索hashmap键以查看给定的整数数组键是否存在,但是hashmap.containsKey()调用始终返回false,因为hashmap包含对整数数组的引用,而不是实际的显式整数数组

有没有一种简单的方法可以使用给定的整数数组搜索hashmap

以下是代码片段:

public static void main (String[] args) {

    Map<int[], Integer> map = new HashMap<int[], Integer>();
    int[] arr1 = {1, 2, 3, 4};
    int[] arr2 = {5, 6, 7, 8};
    map.put(arr1, 1);
    map.put(arr2, 2);
    int[] arr3 = {1, 2, 3, 4};
    System.out.println(map.containsKey(arr3));

}
publicstaticvoidmain(字符串[]args){
Map Map=newhashmap();
int[]arr1={1,2,3,4};
int[]arr2={5,6,7,8};
地图放置(arr1,1);
地图放置(arr2,2);
int[]arr3={1,2,3,4};
系统输出打印LN(地图容器(arr3));
}

数组不适合作为
HashMap
的键,因为数组不会覆盖
equals
hashCode
的默认实现。因此,两个不同的数组对象(例如
arr1
arr3
)并不相等,即使它们包含完全相同的元素且顺序相同


您可以使用
列表
作为键,而不是
int[]
。这就行了。

数组不适合作为
哈希映射的键,因为数组不会覆盖
equals
哈希代码的默认实现。因此,两个不同的数组对象(例如
arr1
arr3
)并不相等,即使它们包含完全相同的元素且顺序相同

您可以使用
列表
作为键,而不是
int[]
。那就行了。

首先,不能在泛型中使用原语值。您的代码将无法编译

其次,永远不要将可变值用作哈希表键

正式地说,您可以使用
List
而不是
int[]
,但这将导致将来难以调试的bug。当您在哈希表中按键访问或搜索时,将为您的值计算一个哈希代码,并在此哈希表的已知值列表中搜索一个固定时间。如果代码更改了用键定义的对象,则在哈希表中将不再找到该键值对

我不建议您使用
List
作为哈希表键,尽管这将解决问题中描述的问题。

首先,您不能在泛型中使用原语值。您的代码将无法编译

其次,永远不要将可变值用作哈希表键

正式地说,您可以使用
List
而不是
int[]
,但这将导致将来难以调试的bug。当您在哈希表中按键访问或搜索时,将为您的值计算一个哈希代码,并在此哈希表的已知值列表中搜索一个固定时间。如果代码更改了用键定义的对象,则在哈希表中将不再找到该键值对


我不建议您使用
List
作为哈希表键,尽管这将解决问题中描述的问题。

数组是一种基本类型吗?那么,对于键,哪种选择更好?它必须包含可变数量的整数(有些键只有1个,而其他键可能是3或4个整数)。@iandeboo这个问题已经得到了回答。使用列表。。。无论哪种方式,如果您要使用
集合
继承器或类似的继承器,请确保它是不可变的…@iandeboo,您可以使用Guava提供的
com.google.common.collect.ImmutableList
,如果您在添加第三方依赖项时遇到问题,只需使用
Collections.unmodifiableList(yourList)
。那么数组是一种什么样的基本类型呢?那么对于键来说,有什么更好的选择呢?它必须包含可变数量的整数(有些键只有1个,而其他键可能是3或4个整数)。@iandeboo这个问题已经得到了回答。使用列表。。。无论哪种方式,如果您要使用
集合
继承器或类似的,请确保它是不可变的…@iandeboo,您可以使用Guava提供的
com.google.common.collect.ImmutableList
,如果您在添加第三方依赖项时遇到问题,只需使用
Collections.unmodifiableList(yourList)