본문 바로가기
프로그래밍/JAVA 내용정리

컬렉션 프레임 워크 (Set, HashSet)

by 노잼인간이라불립니다 2020. 10. 11.

Set 컬렉션과 List컬렉션 비교

구분 저장순서 중복
Set(집합) 유지하지 않음.(순서 없음)
(iterator 사용해야함)
불가(null도 하나의 null만 가능)
List 유지함.(순서 있음) 가능

Set 컬렉션 주요 메소드

기능 메소드 기능 설명
객체 추가 boolean add(E e) 객체 저장 성공 하면 True, 중복 객체면 False***
객체 검색 boolean contains(Object o) 주어진 객체가 저장되어 있는지 여부 True,False
boolean isEmpty() 컬렉션이 비어있는지 True/False
Iterator<E> iterator() 저장된 객체를 한번씩 가져오는 반복자 리턴***
int size() 전체 객체 수 리턴***
객체 삭제 int clear() 저장된 모든 객체 삭제
boolean remove(Object o) 주어진 객체 삭제***

iterator 인터페이스의 메소드

리턴타입 메소드 설명
boolean hasNext() 가져올 객체 있을 시 True, 없으면 False
E next() 컬렉션에서 하나의 객체리턴.
void remove() Set 컬렉션에서 객체 제거.

 

Set 컬렉션은 iterator를 이용하여 객체를 가져와야 한다. (저장순서가 유지되지 않기 때문.)

 

그래서 set 객체를 선언하고 set.Iterator()를 가져와 iterator객체를 가져와 while 문을 이용하여 hasNext()메소드와 next()메소드를 이용하여 객체를 가져와야한다.

 

ex1)

Set<T> set = new HashSet<>();

Iterator<T> iterator = set.Iterator();

while(iterator.hasNext()){

    T t = iterator.next(); 

}

또는

ex2)

Set<T> set = new HashSet<>();

for(T t : set){

...

}

이런식으로 루핑하면서 Set의 객체를 가져와야 한다.

 

Set 컬렉션에서 Iterator의 next() 메소드로 가져온 객체를 제거하고 싶다면 조건문과 equals() 메소드를 활용하여 제거해주면 된다.

 

ex)

while(iterator.hasNext()){

    T t= iterator.next();

    if(t.equals("이순신")){

       iterator.remove("이순신");

    }

}

 

- HashSet

 HashSet은 Set인터페이스의 구현 클래스이다. 중복을 허용하지 않으며, 중복 판단은 hashCode()와 equals()의 리턴값에 따라 동등객체 판정하여 결정한다.