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

前端 未结 2 1280
我在风中等你
我在风中等你 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 reverseOrder = new LinkedHashSet<>();
        reverseOrder.add(2);
        reverseOrder.add(1);
        LinkedHashSet 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
    

提交回复
热议问题