HashSet
- HashSet
- 순서X, 중복X
- Set인터페이스를 구현한 대표적인 컬렉션 클래스
- 순서를 유지하려면 LinkedHashSet클래스 사용
- TreeSet
- 범위 검색과 정렬에 유리한 컬렉션 클래스 (from ~ to, 10 ~ 20)
- HashSet보다 데이터 추가, 삭제에 시간이 더 걸림
HashSet 주요 메서드
- HashSet() - 생성자
- HashSet(Collection c)
- HashSet(int initialCapacity) - 초기용량
- HashSet(int initialCapacity, float loadFactor) - loadFactor : 언제 (0.8이면 80%가 될 때 용량을 x2)
- add(Obejct o) - 추가
- addAll(Collection c) - 합집합
- remove(Obejct o) - 삭제
- removeAll(Collection c) - 차집합
- retainAll(Collection c) - 교집합
- void clear() - 모두 삭제
- contains(0bject o) - 포함?
- containsAll(Collection c) - 여러 객체가 모두 포함?
- isEmpty() - 비었는지?
- size() - 저장된 객체 수
- Object[ ] toArray() - 객체를 객체배열로 반환
실습1
class Ex1 {
public static void main(String[] args) {
Object[] objArr = {"1", new Integer(1), "2", "2", "3", "3", "4", "4", "4"};
Set set = new HashSet();
for(int i=0;i<objArr.length; i++) {
set.add(objArr[i]);
}
System.out.println(set);
Iterator it = set.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
}
실습2
- HashSet()은 순서 x -> list에 넣으면 순서o (정렬 가능)
class Ex1 {
public static void main(String[] args) {
Set set = new HashSet();
for(int i=0;set.size()<6; i++) {
int num = (int)(Math.random()*45) +1;
set.add(num);
}
List list = new LinkedList(set);
Collections.sort(list);
System.out.println(list);
}
}
실습3
- HashSet은 객체를 저장하기 전에 기존에 같은 객체가 있는지 확인
-> 같은 객체가 없으면 저장하고, 있으면 저장하지 않는다.
- boolean add(Object o)는 저장할 객체의 equals()와 hashCode()를 호출하여 중복여부 확인
-> equals()와 hashCode()가 오버라이딩 되어 있어야 함
class Ex1 {
public static void main(String[] args) {
Set set = new HashSet();
set.add("abc");
set.add("abc");
set.add(new Person("David",10));
set.add(new Person("David",10));
System.out.println(set);
}
}
class Person {
String name;
int age;
@Override
public int hashCode() {
return Objects.hash(name, age);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
return age == other.age && Objects.equals(name, other.name);
}
Person(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return name + ":" + age;
}
}
실습4
- addAll(Collection c) - 합집합
- removeAll(Collection c) - 차집합
- retainAll(Collection c) - 교집합
setA.retainAll(setB);
setA.addAll(setB);
setA.removeAll(setB);