我想创建一个数组的HashMap,我希望这些数组都是固定大小的(8)。我该怎么做?
我试过了:
HashMap<Boolean[8],Boolean[8]> map = new HashMap<>();
似乎不起作用,它只是要我删除8。
我做错了什么?
答案 0 :(得分:1)
此处的问题是您尝试将Boolean[8]
用作类型,但正确的类型为Boolean[]
。但是,这可能不会达到您的预期,因为Java数组的hashCode
和equals
方法是使用引用实现的。
这里的含义的简短示例:
int[] a = new int[] {0};
int[] b = new int[] {0};
System.out.println(a.hashCode());
// 705927765 ; changes every time
System.out.println(b.hashCode());
// 366712642 ; changes every time
System.out.println(a.equals(b));
// false
因此,如果您必须将集合用作HashMap中的键,则应考虑使用List
,它基于所包含的值实现equals
和hashCode
方法。
List<Integer> a = new ArrayList<>();
List<Integer> b = new ArrayList<>();
a.add(new Integer(0));
b.add(new Integer(0));
System.out.println(a.hashCode());
// 31
System.out.println(b.hashCode());
// 31
System.out.println(a.equals(b));
// true
现在,与您的确切示例相关,您尝试使用Boolean
数组。如果数组的大小有界且低于64,则可以使用数字类型来表示它。只需将true
表示为1,将false
表示为0。
提醒Java数字类型的大小:
答案 1 :(得分:0)
Boolean[8]
不是参数类型,Boolean[]
是。