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

Alo*_*lok 2 java arrays linkedhashmap

这实际上不是一个普遍的问题,但是是的。我在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");
}
Run Code Online (Sandbox Code Playgroud)

我所能做出的就是将数组转换为列表 tmp

Arrays.asList(tmp)
Run Code Online (Sandbox Code Playgroud)

2.将其转换为LinkedHashSet

LinkedHashSet<Integer>(Arrays.asList(tmp))
Run Code Online (Sandbox Code Playgroud)

3.然后找到HashSet的大小

(LinkedHashSet<Integer>(Arrays.asList(tmp))).size()
Run Code Online (Sandbox Code Playgroud)

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

(new LinkedHashSet<Integer>(Arrays.asList(tmp))).size() == seq.length)
Run Code Online (Sandbox Code Playgroud)

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

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

Era*_*ran 5

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

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

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