6개월 대장정/JAVA 개념

26일차 - 컬렉션 프레임 워크-Set컬렉션

pitang 2021. 9. 20. 01:35
반응형

안녕하세요. pitang입니다. 

컬렉션 프레임 워크 중 Set 컬렉션에 대해 알아보겠습니당~!

 

Set 컬렉션

Set 컬렉션은 저장 순서가 유지되지 않고, 객체를 중복해서 저장할 수 없다. 그리고 하나의 null만 저장할 수 있다.

이 컬렉션에는 HashSet, LinkedHashSet, TreeSet 등이 있다.

 

boolean add(E e) - 객체가 성공적으로 저장되면 true, 중복 객체라면 false를 리턴

 

boolean contains(Object o) - 주어진 객체가 저장되어 있는지의 여부

boolean isEmpty() - 컬렉션이 비어 있는지 조사

int size() - 저장되어 있는 전체 객체 수 리턴

 

void clear() - 저장된 모든 객체를 삭제

boolean remove(Object o) - 주어진 객체를 삭제

 

HashSet은 Set 인터페이스의 구현 클래스이고 

Set<E> set = new HashSet <E>(); 로 생성자를 호출하면 된다. 타입 파라미터 E에는 컬렉션에는 저장할 객체 타입을 지정하면 된다.

HashSet은 객체들을 순서 없이 저장하고 동일한 객체는 중복 저장하지 않는다. 

동일한 객체란, 꼭 같은 인스턴스를 뜻하지는 않는다. 

 

HashSet은 객체를 저장하기 전에 먼저 객체의 hashCode() 메서드를 호출해 해시 코드를 얻어낸다.

그리고 이미 저장되어 있는 객체들의 해시 코드와 비교한다. 동일한 해시 코드가 있다면 equals()로 비교해 true라면 저장하지 않는다.

 

ex)

p02set Ex02
console

 

Iterator 인터페이스

Set 컬렉션은 인덱스로 객체를 검색해서 가져오는 메서드가 없기 때문에

전체 객체를 대상으로 한 번씩 반복해서 가져오는 반복자(Iterator)를 제공한다.

 

지금의 업그레이드(?)된 자바는 향상된 for문을 제공하기에 인덱스가 없어도 사용 가능하다.

하지만, 옛날에는 반복자(Iterator)를 사용했었다. 옛날의 코드 혹은, 코드들을 해석하려면 알고는 있어야 한다.

 

Iterator <E> iterator() - 저장된 객체를 한 번씩 가져오는 반복자 리턴 -> iterator() 메서드를 호출하면 얻을 수 있음.

 

iterator.next() - 하나의 객체를 가져올 때

boolean hasNext() - 가져올 객체가 있으면 true를 리턴하고 없으면 false를 리턴

E next() - 컬렉션에서 하나의 객체를 가져옴.

void remove() - Set컬렉션에서 객체를 제거한다.

 

 

ex1)

p02set Ex03iterator
console

 

ex2)

p02set Ex04Equals - Class Car
p02set Ex04Equals
console

-> Car class에서 hashCode()와 equals(Object obj)를 재정의했으므로 set2의 개수가 3개가 되는 것을 볼 수 있다.

     재정의할 때 model만, number만 따로 재정의 할 수 있다.

     예를 들어, model은 같고 number가 다르면 다른 객체로 인식하게 재정의할 수도 있다.

 

감사합니다.

 

*m1 맥북을 사용 중입니다.*

 

 

 

 

 

 

 

728x90
반응형