int[] a = new int[]{0, 0};
HashSet<int[]> set = new HashSet<>();
set.add(a);
然后:
int[] b = new int[]{0, 0};
set.contains(b); // ===> true
int[] a = new int[] { 0, 0 };
HashSet<int[]> set = new HashSet<>();
set.add(a);
int[] b = new int[] { 0, 0 };
boolean contains = set.stream().anyMatch(c -> Arrays.equals(c, b));
System.out.println("Contains? " + contains);
输出:
包含?真
但是,它没有利用散列集
的快速查找功能。正如注释中所指出的,这是不可能的,因为equals
和hashcode
for arrays不认为包含相同顺序的相同数字的数组是相等的。数组只被认为等于自身。因此,我们需要在集合中进行线性搜索,以找到包含相同数字的数组(如果有的话)。我使用的是一个流管道。您也可以使用循环。
List<Integer> a = List.of(0, 0);
HashSet<List<Integer>> set = new HashSet<>();
set.add(a);
List<Integer> b = List.of(0, 0);
System.out.println("Contains? " + set.contains(b));
public class IntArray {
int[] elements;
public IntArray(int... elements) {
// Make a defensive copy to shield from subsequent modifications of the original array
this.elements = Arrays.copyOf(elements, elements.length);
}
@Override
public int hashCode() {
return Arrays.hashCode(elements);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
IntArray other = (IntArray) obj;
return Arrays.equals(elements, other.elements);
}
}
IntArray a = new IntArray(0, 0);
HashSet<IntArray> set = new HashSet<>();
set.add(a);
IntArray b = new IntArray(0, 0);
System.out.println("Contains? " + set.contains(b));
包含?真
现在,我们拥有了原始int
数组方法的空间效率,以及hashcode()
的时间效率。
作为在评论中的毛茸茸的注释,还有更多的选项,你可能想要自己研究一些。我在这里引用评论:
public final class IntArrayKey {
private final int[];
...
}
public final class Key<T> {
private final Predicate<T> equals;
private final IntSupplier hashCode;
public static Key<int[]> of(final int[] array) {
return new Key<>(that -> Arrays.equals(array, that), () -> Arrays.hashCode(array));
}
本文向大家介绍JavaScript 检查集合中是否存在值,包括了JavaScript 检查集合中是否存在值的使用技巧和注意事项,需要的朋友参考一下 示例 要检查集合中是否存在给定值,请使用方法:.has() true如果someVal出现在集合中,将返回,false否则返回。
是否存在线性加密哈希函数? 所谓线性,我是指函数“f”,这样: 对于某个大常数 n,mod n 在哪里
问题内容: 我有一个名为“ bob”的数组,其中包含值。 我如何才能知道在没有迭代的情况下名为bob的数组中是否存在“傻”值? 问题答案: 您可以使用方法。为此,您需要将数组转换为列表。您可以使用以下方法:
与此问题类似,如何查找数组中是否存在空值? 这里有一些尝试。 只有使用array\u to\u string的技巧才会显示预期值。有没有更好的方法来测试这一点?
问题内容: 有没有一种方法可以检查nodestore的firestore中是否存在子集合? 目前,我正在使用文档,但是我需要检查文档中是否存在子类以便写入一些数据。 问题答案: 就在这里。您可以使用docs.length来知道子集合是否存在。 我制作了一个样本来指导您,希望对您有所帮助。
当页面第一次加载时,我需要检查中是否有图像,并加载最后一个图像。 否则,我禁用预览按钮,提醒用户按下新图像按钮,并创建一个空数组来放置图像; 问题是中的