作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想创建一个数组的 HashMap,并且我希望数组都具有固定大小 (8)。我该怎么做?
我已经尝试过:
HashMap<Boolean[8],Boolean[8]> map = new HashMap<>();
它似乎不起作用,它只是想让我删除 8。
我做错了什么?
最佳答案
这里的问题是您尝试使用 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,则可以使用数值类型来表示。只需用 1 表示 true
,用 0 表示 false
。
Java 数字类型大小的提醒:
关于java - 一定大小的数组的HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37450373/
我正在尝试开发右边框/Angular 具有特定 Angular (30°) 的表格。我见过一些类似的解决方案,但它们都无法在一定程度上发挥作用。如果我想从 30° 改变到 20°,我不想花太多力气。
我是一名优秀的程序员,十分优秀!