LinkedHashSet .equals() vs LinkedList .equals() with same elements but different order

前端 未结 2 1261
我在风中等你
我在风中等你 2021-01-12 01:50

Consider the following SSCCE:

public static void main(String[] args) {
    LinkedHashSet set1 = new LinkedHashSet<>();
    set1.add(\"Bob         


        
相关标签:
2条回答
  • 2021-01-12 02:31

    As mentioned above: LinkedHashSet extends HashSet which extends AbstractSet which implements equals method: https://docs.oracle.com/javase/8/docs/api/java/util/AbstractSet.html#equals-java.lang.Object-

    Compares the specified object with this set for equality. Returns true if the given object is also a set, the two sets have the same size, and every member of the given set is contained in this set. This ensures that the equals method works properly across different implementations of the Set interface.

    The easiest way to compare LinkedHashSet if order if important to you is to serialize it and compare them then:

        LinkedHashSet<Integer> reverseOrder = new LinkedHashSet<>();
        reverseOrder.add(2);
        reverseOrder.add(1);
        LinkedHashSet<Integer> ordered = new LinkedHashSet<>();
        ordered.add(1);
        ordered.add(2);
        System.out.println("Equals via set: " + ordered.equals(reverseOrder));
        System.out.println("Equals With Arrays: " + ordered.ordered.toString().equals(reverseOrder.ordered.toString()));
    

    Result:

    Equals via Set: true
    Equals With Arrays: false
    
    0 讨论(0)
  • 2021-01-12 02:39

    The guarantee that LinkedHashSet makes is about iteration order. However, it's still a Set and a set doesn't care about order in itself. A List on the other hand, does. A List with an element in 3rd position is not the same as another List with the same element in the 1st position.

    Set javadoc for the equals(Object) method

    Returns true if the specified object is also a set, the two sets have the same size, and every member of the specified set is contained in this set (or equivalently, every member of this set is contained in the specified set). This definition ensures that the equals method works properly across different implementations of the set interface.

    The LinkedHashSet javadoc states

    Hash table and linked list implementation of the Set interface, with predictable iteration order.

    A LinkedHashSet is a Set. It has the same rules, ie. those that apply to the set ADT.

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