使用Java中的LinkedHashSet检查数组中的唯一值 - java

这实际上不是一个普遍的问题,但是是的。我在HackerRank上遇到了这段代码,通过理解这段代码我确实感到困惑,它使用HashMap来检查数组中元素的唯一性

现在给您一个见解,我知道如何做到这一点,这也很容易。但是这段代码是不同的,我真的需要学习它的实际功能。任何帮助表示赞赏。

int[] seq = new int[]{3,2,1,3};

Integer[] tmp = new Integer[seq.length];
for (int i = 0; i < seq.length; ++i) {
  tmp[i] = Integer.valueOf(seq[i]);
}

/* THIS PIECE OF CODE, HOW THIS WORKS AND WHAT IT DOES???*/         
if (!((new LinkedHashSet<Integer>(Arrays.asList(tmp))).size() == seq.length)) {
    throw new AssertionError("not all values are unique");
}

我所能确定的是它将数组转换为tmp的列表

Arrays.asList(tmp)

2.将其转换为LinkedHashSet

LinkedHashSet<Integer>(Arrays.asList(tmp))

3.然后找到HashSet的大小

(LinkedHashSet<Integer>(Arrays.asList(tmp))).size()

4.将其与数组序列的长度进行比较。

(new LinkedHashSet<Integer>(Arrays.asList(tmp))).size() == seq.length)

问题:如果长度不等于数组seq,那么元素如何唯一?

任何帮助将不胜感激,只是想学习这个概念,这肯定会在将来对我有帮助。谢谢 :)

参考方案

这段代码创建一个LinkedHashSet,其中包含原始数组的所有元素(从intInteger装箱)。

由于LinkedHashSet(与所有Set一样)不包含重复元素,因此当且仅当Set的大小等于数组的长度时,原始数组才没有重复。

如果数组中有任何重复项,则Set的大小将小于数组的长度,因为初始化LinkedHashSet时将消除重复项。

Java-固定大小的列表与指定初始容量的列表之间的差异 - java

我在理解这一点上遇到了问题。当我们做 List<Integer> list = Arrays.asList(array); 我们不能在该列表上使用添加,删除之类的方法。我知道Arrays.asList()返回固定大小的列表。我不明白的是,如果我们创建一个具有指定初始容量的列表,例如List<Integer> list2 = new A…

Java-搜索字符串数组中的字符串 - java

在Java中,我们是否有任何方法可以发现特定字符串是字符串数组的一部分。我可以避免出现一个循环。例如String [] array = {"AA","BB","CC" }; string x = "BB" 我想要一个if (some condition to tell wheth…

从方法返回数组-Java - java

private static Coordinate[] getCircleCoordintaes() { Coordinate coordinates[] = {new Coordinate(0, 0)}; return coordinates; } 以上程序工作正常。在上面的程序中,返回的坐标数组首先初始化了数组使用这条线Coordinate coordi…

JAVA:如何检查对象数组中的所有对象是否都是子类的对象? - java

我有一个对象数组。现在,我要检查所有这些对象是否都是MyObject的实例。有没有比这更好的选择:boolean check = true; for (Object o : justAList){ if (!(o instanceof MyObject)){ check = false; break; } } java大神给出的解决方案 如果您不喜欢循环,则…

Java:线程池如何将线程映射到可运行对象 - java

试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …