Adding arrays with same values to HashSet results in duplicate items

后端 未结 2 810
有刺的猬
有刺的猬 2020-12-11 03:01

I\'m trying to create a set of arrays of ints, the thing is that if I try to do:

HashSet s = new HashSet();
int a1[] = {1,2,3};
int         


        
相关标签:
2条回答
  • 2020-12-11 03:42

    It has nothing to do with collision at the end of the day:

    a1.equals(a2) == false
    

    Since they are not equal, a Set will treat them as different.

    Note Array in Java does not override the equals method from Object.

    And since add in Set is defined as

    More formally, adds the specified element e to this set if the set contains no element e2 such that (e==null ? e2==null : e.equals(e2))

    is seems to be impossible to properly implement a Set that might meet your requirement (compare elements with Arrays.equals) without violating some contracts.

    0 讨论(0)
  • 2020-12-11 03:48

    The reason the HashSet> works is because the HashSet will use .equals() comparison to decide if you're inserting the same object twice. In the case of List, two lists of the same base type (e.g. ArrayList) with the same content, in the same order, will compare as equal. Thus you're telling the HashSet to insert the same object twice. It only takes a single instance once.

    When you try to do that same operation with an array. See this post: equals vs Arrays.equals in Java for more details about array comparisons in Java. When you insert two arrays, the default .equals() tests if they are the same object, which they are not. Thus it fails.

    0 讨论(0)
提交回复
热议问题