2017  Kodetalk | Feedback | Privacy Policy | Terms | About
userimage

Simple way to find if two different lists contain exactly the same elements?

What is the simplest way to find if two Lists contain exactly the same elements, in the standard Java libraries?

It shouldn"t matter if the two Lists are the same instance or not, and it shouldn"t matter if the type parameter of the Lists are different.

For ex:

List list1

List<String> list2; 

// ... construct etc

list1.add("A");

list2.add("A"); 

// the function, given these two lists, should return true


userimage

If you care about order, then just use the equals method:

list1.equals(list2)list1.equals(list2)

Compares the specified object with this list for equality. Returns true if and only if the specified object is also a list, both lists have the same size, and all corresponding pairs of elements in the two lists are equal. (Two elements e1 and e2 are equal if (e1==null ? e2==null : e1.equals(e2)).) In other words, two lists are defined to be equal if they contain the same elements in the same order. This definition ensures that the equals method works properly across different implementations of the List interface.

If you want to check independent of order, you could copy all of the elements to Sets and use equals on the resulting Sets:

Set<Object> set1 = new HashSet<Object>();
set1.addAll(list1);
Set<Object> set2 = new HashSet<Object>();
set2.addAll(list2);
set1.equals(set2)


One caveat with this approach is that it won't check duplicates exactly. eg: if list1 was ["A", "B", "A"] and list2 was ["A", "B", "B"] the Set approach would say they were equal.

Answer is