원시 타입은 값 비교를 통해, 클래스는 eqauls와 hashcode를 통해 동등성을 비교한다. 그렇다면 순서가 없는 컬렉션의 중복은 어떻게 제거하는지 알아보자.
(원소 개수)!/(같은 원소의 개수!)
Set<List<E>> set = new HashSet<>();
list1 = {1,2,3}
list2 = {1,2,3}
set.add(list1);
set.add(list2);
// set.size() == 1;
list3 = {3,2,1}
set.add(list3);
// set.size() == 2;
Set<Set<E>> set = new HashSet<>();
Set<E> subset1 = new HashSet<>();
subset1.add("A");
subset1.add("B");
// subset1 = ["A", "B"]
set<E> subset2 = new HashSet<>();
subset2.add("B");
subset2.add("A");
// subset2 = ["B", "A"]
// 편의상 순서를 나눈 것 뿐 내부적으로는 순서가 없다.
Set<E> copiedSet1 = new HashSet<>(subset1);
Set<E> copiedSet2 = new HashSet<>(subset2);
set.add(copiedSet1);
set.add(copiedSet2);
// set.size() == 1;