Java集合中重复去除背后的机制是什么(例如LinkedHashset)



有人可以向我解释下面的代码如何工作?目的是删除数组中的重复值。我了解其中的一部分,但不是完全

import java.util.Arrays;
import java.util.LinkedHashSet;
public class ArrayExample
{
    public static void main(String[] args) throws `CloneNotSupportedException`
    {
        //Array with duplicate elements
        Integer[] numbers = new Integer[] {1,2,3,4,5,1,3,5};
        //This array has duplicate elements
        System.out.println( Arrays.toString(numbers) );
        //Create set from array elements
        LinkedHashSet<Integer> linkedHashSet = new LinkedHashSet<>( Arrays.asList(numbers) );
        //Get back the array without duplicates
        Integer[] numbersWithoutDuplicates = linkedHashSet.toArray(new Integer[] {});
        //Verify the array content
        System.out.println( Arrays.toString(numbersWithoutDuplicates) );
    }
} 

HashSetLinkedHashSet是如此实现,以防止重复对象。在这里,您正在为构造函数创建一个传递列表,因此结果集只有不同的元素。它在碰撞上使用hashCodeequals

Set在Java中试图重新创建数学集,这些集合是无法复制的元素集合。您正在做的是创建一个具有重复项的数组numbers,然后创建一个LinkedHashSet(这是一种HashSet,这是一种Set)。该集合包含数组的所有元素,并且由于它是一个集合,因此没有重复。然后,您只需将此集合转换为一个可能具有不同顺序且无重复的数组即可。

集合接口是一个无法包含重复元素的集合。 有关更多详细信息,请参见https://docs.oracle.com/javase/javase/tutorial/tutorial/collections/interfaces/set.html。实现示例是标签和linkedhashset

LinkedHashSetHashSet延伸,HashSet实际使用HashMap来存储元素。Java中的Map要求键必须唯一,重复键将覆盖。

最新更新