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
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.
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.