Set컬렉션
객체를 저장하는 Set컬렉션
ㅇList컬렉션과 다른 점
ㄴ저장 순서가 유지되지 않는다.
ㄴ객체를 중복해서 저장할 수 없다!! + 하나의 null만 저장 가능
ㄴ수학의 집합과 성격이 비슷
ㄴ인덱스로 관리하지 않는다 (순서 개념 자체가 없음)
Set 컬렉션에는 HashSet, LinkedHashSet, TreeSet 등이 있다.
이들은 Set인터페이스의 컬렉션클래스(구현클래스)이다.
<<Set컬렉션에서 공통적으로 사용 가능한 Set인터페이스의 메소드 정리>>
기능 | 메소드 | 설명 |
객체 추가 | boolean add(E e) | 객체를 저장. 성공적으로 저장되면 true를 리턴, 중복 객체면 false 리턴 |
객체 검색 | boolean contains(Object o) | 주어진 객체가 저정되어있는지 조사 |
boolean isEmpty() | 컬렉션이 비어있는지 조사 | |
Iterator<E> iterator() | 저장된 객체를 한 번씩 가져오는 반복자 리턴 | |
int size() | 저장된 전체객체 수를 리턴 | |
객체 삭제 | void clear() | 저장된 모든 객체 삭제 |
boolean remove(Object o) | 주어진 객체 삭제 |
Set컬렉션에 String객체가 들어가게 해보자.
Set<String> set = ...;
set.add("냥냥이");
set.add("야옹야옹");
set.remove("냥냥이");
Set 컬렌션은 객체를 인덱스를 통해 가져올 수 없다. 집합의 개념으로 보지 순서가 있는 인덱스 개념은 없다.
대신 그 전체 객체를 대상으로 해서 한번씩 가져오게 하는 반복자(Iterator)를 제공한다.
반복자는 Iterator 인터페이스를 구현한 객체로, iterator()메소드를 호출해 얻을 수 있다.
Set<String> set = ...;
Iterator<String> iterator = set.iterator();
++Iterator 인터페이스에 선언된 메소드들
리턴타입 | 메소드 | 설명 |
boolean | hasNext() | 가져올 객체가 있는지 true or false |
E | next() | 컬렉션에서 하나의 객체 가져오기 |
void | remove() | Set컬렉션에서 객체 제거 |
>>next()메소드 사용 전에 (컬렉션에서 객체하나 가져오기 전에)
hasNext()메소드로 '가져올 객체가 있는지 먼저'확인하는 게 좋다.
hasNext()에서 true가 리턴될 때 next()로 객체를 가져오자.
<<Set컬렉션에서 String객체를 반복해 가져오기>>
ㅇIterator 사용 |
ㅇ향상된 for문 사용 Set<String> set = ...; for(String str : set) { //저장된 객체 수만큼 루핑 } |
Set인터페이스의 구현클래스
HashSet
HashSet 생성하기 : Set<E> set = new HashSet<E>();
마찬가지로 타입파라미터 E에는 컬렉션에 저장할 객체 타입 넣는다.
Set<String> set = new HashSet<String>();
Set<String> set = new HashSet<>();
해시셋 생성할 때 해시셋쪽에 타입파라미터 안쓰면 왼쪽에 써준 Set에 지정된 타입을 따라간다.
HashSet
ㄴ역시 객체들을 순서없이 저장 + 동일객체는 중복저장하지 않음
ㄴ동일객체란? => hashCode()리턴값 같고 equals()리턴값까지 true여야 한다.
동일한 객체는 꼭 같은 인스턴스를 뜻하지는 않는다.
ㄴ문자열을 HashSet에 저장할 때를 보자 : 동등한 객체인지 판단할 때, String객체에 '같은 문자열'이 저장되어있기만 한다면 동일한 객체로 간주한다. "String클래스에서 hashCode()와 equals() 메소드를 재정의했기 때문 -> 같은 문자열일 때 hashCode()리턴값 같게, equals리턴값 true가 나오게" 관련내용 복습
<<예제: HashSet에 String객체 넣기>> cf) 중복 없이 저장
HashSet 컬렉션클래스 내부의 이 '동일객체판단'기능을 이해해보자.
>>Member클래스를 정의하고 여기서 hashCode()와 equals()메소드를 재정의해보자.
인스턴스가 달라도 이름, 나이가 동일하면 동일한 객체로 간주하도록 재정의하자. (<-중복저장방지)
연습문제 08
'JAVA' 카테고리의 다른 글
[혼자 공부하는 자바] 8/9 13-1 [Map 컬렉션] [Map인터페이스] [HashMap] [Hashtable] (0) | 2020.08.09 |
---|---|
[4주차] 기본미션 + 선택미션 [혼공단] [혼공자] (0) | 2020.08.02 |
[혼자 공부하는 자바] 7/31 13-1 [List 컬렉션] [ArrayList] [Vector] [LinkedList] (0) | 2020.07.31 |
[혼자 공부하는 자바] 7/31 13-1 [컬렉션 프레임워크] (0) | 2020.07.31 |
[혼자 공부하는 자바] 7/30 12-2 [스레드 제어] [스레드 일시정지] [sleep()] [안전한 종료] [interrupt()] [InterruptedException] [주스레드] [데몬스레드] (0) | 2020.07.31 |