特定大小

时间:2016-05-26 02:02:32

标签: java arrays hashmap

我想创建一个数组的HashMap,我希望这些数组都是固定大小的(8)。我该怎么做?

我试过了:

HashMap<Boolean[8],Boolean[8]> map = new HashMap<>();

似乎不起作用,它只是要我删除8。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

此处的问题是您尝试将Boolean[8]用作类型,但正确的类型为Boolean[]。但是,这可能不会达到您的预期,因为Java数组的hashCodeequals方法是使用引用实现的。

这里的含义的简短示例:

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,它基于所包含的值实现equalshashCode方法。

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数字类型的大小:

  • 字节/字节:8位
  • 短/短:16位
  • int / Integer:32位
  • long / Long:64位

答案 1 :(得分:0)

Boolean[8]不是参数类型,Boolean[]是。