컬렉션 프레임워크(Collections Framework) - Set Interface
📚 Set Interface
- 저장 순서가 유지되지 않는다.
- 객체를 중복해서 저장할 수 없고, 하나의
null
만 저장할 수 있다.
- 인덱스로 관리하지 않기 때문에 인덱스를 매개값으로 갖는 메소드가 없다.
- 저장 순서가 유지되지 않는다.
- 객체를 중복해서 저장할 수 없고, 하나의
null
만 저장할 수 있다. - 인덱스로 관리하지 않기 때문에 인덱스를 매개값으로 갖는 메소드가 없다.
[ 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 객체를 저장하는 HashSet 생성
Set<String> set = new HashSet<String>();
set.add("Java");
set.add("JDBC");
set.add("Servlet/JSP");
set.add("Java"); //중복 안됨
set.add("iBATIS");
System.out.println("총 객체수: " + set.size());
Iterator<String> iterator = set.iterator(); //반복자
while(iterator.hasNext()) { //객체 수만큼 루핑
String element = iterator.next(); //1개의 객체를 가져옴
System.out.println("\t" + element);
}
set.remove("JDBC");
set.remove("iBATIS");
System.out.println("총 객체수: " + set.size());
//for문으로도 가능
for(String element : set) {
System.out.println("\t" + element);
}
set.clear();
if(set.isEmpty()) { System.out.println("비어 있음"); }
🔔 Set 예제 출력
총 객체수: 4
Java
JDBC
Servlet/JSP
iBATIS
총 객체수: 2
Java
Servlet/JSP
비어 있음
1. HashSet
- Set 인터페이스를 구현한 가장 대표적인 컬렉션
- 순서 없이 저장하고 동일한 객체는 중복 저장하지 않는다.
- 객체를 저장하기 전에 먼저 객체의
hashCode()
메소드를 호출해 비교 한다. 동일한 해시코드가 있다면 다시equals()
메소드로 두 객체를 비교해 true 가 나오면 동일한 객체로 판단해 중복 저장을 하지 않는다.- 저장 순서를 유지하고자 한다면 LinkedHashSet을 사용해야한다.
Set<E> set = new HashSet<E>();
Set<E> set = new HashSet<>();
2. TreeSet
- 이진 검색 트리라는 자료구조의 형태로 데이터를 저장하는 컬렉션 클래스
- 순서 없이 저장하고 동일한 객체는 중복 저장하지 않는다.
🎄 이진 검색 트리(binary search tree)
- 모든 노드는 최대 두 개의 자식노드를 가질 수 있다.
- 왼쪽 자식노드의 값은 부모노드의 값보다 작고, 오른쪽 자식노드의 값은 부모노드의 값보다 커야한다.
- 노드의 추가 삭제에 시간이 걸린다. (순차적으로 저장하지 않으므로)
- 검색(범위검색)과 정렬에 유리하다
- 중복된 값을 저장하지 못한다.
메소드 | 설명 |
---|---|
headSet(Object toElement) | 지정된 객체보다 작은 값의 객체들을 반환 |
tailSet(Object fromElement) | 지정된 객체보다 큰값의 객체들을 반환 |
subSet(Object fromElement, Object toElement) | 범위 검색(fromElement와 toElement 사이)의 결과를 반환한다. (끝 범위인 toElement는 범위에 포함되지 않음) |
💻 TreeSet 예제
class TreeSetEx1 {
public static void main(String[] args) {
TreeSet<String> set = new TreeSet<String>();
String from = "b";
String to = "d";
set.add("abc"); set.add("alien"); set.add("bat"); set.add("car");
set.add("Car"); set.add("disc"); set.add("dance"); set.add("dZZZZ");
set.add("dzzzz"); set.add("elephant"); set.add("elevator");
set.add("fan"); set.add("flower");
System.out.println(set);
System.out.println("range search : from " + from + " to " + to);
System.out.println("result1 : " + set.subSet(from, to));
System.out.println("result2 : " + set.subSet(from, to + "zzz"));
}
}
class TreeSetEx2 {
public static void main(String[] args) {
TreeSet<Integer> set = new TreeSet<Integer>();
int[] score = { 80, 95, 50, 35, 45, 65, 10, 100 };
for (int i = 0; i < score.length; i++)
set.add(new Integer(score[i]));
System.out.println("50보다 작은 값 :" + set.headSet(new Integer(50)));
System.out.println("50보다 큰 값 :" + set.tailSet(new Integer(50)));
}
}
🔔 TreeSet 예제 출력
[Car, abc, alien, bat, car, dZZZZ, dance, disc, dzzzz, elephant, elevator, fan, flower]
range search : from b to d
result1 : [bat, car]
result2 : [bat, car, dZZZZ, dance, disc]
---
50보다 작은 값 :[10, 35, 45]
50보다 큰 값 :[50, 65, 80, 95, 100]
📖 참고 문헌
Author And Source
이 문제에 관하여(컬렉션 프레임워크(Collections Framework) - Set Interface), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@imok-_/컬렉션-프레임워크Collections-Framework-Set-Interface
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Author And Source
이 문제에 관하여(컬렉션 프레임워크(Collections Framework) - Set Interface), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@imok-_/컬렉션-프레임워크Collections-Framework-Set-Interface저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)