List : 순서 O, 중복 O
Set 인터페이스를 구현한 클래스 : HashSet, SortedSet, TreeSet
HashSet
TreeSet
HashSet()
HashSet(Collection c)
HashSet(int initialCapacity) // 초기용량
HashSet(int initialCapacity, float loadFactor) // loadFactor만큼 데이터가 차면 2배로 생성
추가
boolean add(Object o)
boolean addAll(Collection c) // 합집합
삭제
boolean remove(Object o)
boolean removeAll(Collection c) // 교집합
boolean retainAll(Collection c) // 조건부 삭제, 차집합
void clear() // 모두 삭제
boolean contains(Object o) // 객체가 포함되어있는지 여부
boolean containsAll(Collection c) // 여러객체가 모두 포함 되는지 여부
Iterator iterator()
boolean isEmpty() // 비어있는지 여부
int size()
Object[] toArray() // 객체 배열로 반환
Object[] toArray(Object[] a)
객체간의 비교이기 때문에 객체의 값을 정확하게 비교해야되기 때문이다.
class Person {
String name;
int age;
public Person(String name, int age) {
this.age = age;
this.name = name;
}
public String toString() {
return name+":"+age;
}
@Override
public int hashCode() {
return Objects.hash(age, name);
}
@Override
public boolean equals(Object obj) {
if(!(obj instanceof Person)) return false;
Person p = (Person)obj;
return this.name.equals(p.name) && this.age == p.age;
}
}
class를 작성할 때 equals()와 hashCode()를 오버라이딩해야 HashSet이 바르게 동작
(하지 않는다면 중복된 데이터가 담길 수 있다)