【问题标题】:What is the mechanism behind duplicate removal in java Collections (e.g LinkedHashSet)java Collections中重复删除背后的机制是什么(例如LinkedHashSet)
【发布时间】:2019-08-02 20:09:00
【问题描述】:

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

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) );
    }
} 

【问题讨论】:

  • 你有什么不明白的?
  • 一组自动删除重复项。 LinkedHashSet 维护插入顺序。

标签: java list arraylist collections set


【解决方案1】:

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

【讨论】:

  • 嗨,谢谢,但我的疑问是“LinkedHashSetlinkedHashSet = new LinkedHashSet(Arrays.asList(numbers));”线向前;你能解释一下这段代码在做什么吗?
  • 您将List 传递给HashSet 的构造函数
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    Set 接口是一个不能包含重复元素的集合。 有关详细信息,请参阅https://docs.oracle.com/javase/tutorial/collections/interfaces/set.html。一个示例实现是 HashSet 和 LinkedHashSet

    【讨论】:

      【解决方案4】:

      LinkedHashSetHashSet扩展而来,HashSet真正使用HashMap来存储元素。java中的Map要求key必须唯一,重复key会覆盖。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-26
        • 1970-01-01
        • 1970-01-01
        • 2017-09-20
        • 1970-01-01
        • 2012-11-19
        • 1970-01-01
        • 2018-07-17
        相关资源
        最近更新 更多