1. 특징
① 객체 저장 순서 유지 불가 → 객체 저장 순서와 찾는 객체가 뽑히는 결과의 순서가 다를 수 있음
② 객체 중복 저장 불가
③ NULL 하나만 저장 가능
2. Set 인터페이스 메소드
* 특징
① 인덱스로 관리되지 않음 → 인덱스를 매개값으로 갖는 메소드 없음, 인덱스로 객체 검색 불가
② 인덱스 대신 전체 객체를 대상으로 한번씩 반복해서 가져오는 반복자(Iterator) 사용
기능 |
메소드 |
설명 |
객체 추가 |
add(E) |
- 객체 저장 - 논리값 반환 (True/False) |
객체 검색 |
contains(Object) |
- 객체 저장 여부 확인 - 논리값 반환 (True/False) |
isEmpty( ) |
- 컬렉션 비어 있는지 확인 - 논리값 반환 (True/False) |
|
Iterator<E> iterator( ) |
- 저장 객체를 하나씩 가져오는 반복자 반환 |
|
int size( ) |
- 저장되어 있는 객체 수 반환 |
|
객체 삭제 |
clear( ) |
- 저장 객체 모두 삭제 - 반환값 없음 |
remove(Object) |
- 객체 삭제 - 논리값 반환 (True/False) |
3. Set 인터페이스의 구현 클래스
(1) HashSet
1) 객체 저장
① 저장 방법
- hashcode( ) 메소드 호출 : 저장할 객체의 해시코드를 얻음, 저장할 객체의 해시코드와 저장된 객체의 해시코드 비교
해시코드가 같을 경우 equals( ) 메소드 호출, 해시코드가 다른 경우 저장
- equals( ) 메소드 호출 : 동일한 해시코드가 있을 경우 저장할 객체와 저장된 객체를 추가 비교
true값 반환 시, 동일 객체로 판단하여 저장 안함, false 반환시 다른 객체로 판단 후 저장
② 문자열 객체 저장
- 같은 문자열을 갖는 String 객체일 경우 String 클래스가 hashCode()와 equals() 메소드를 재정의
- hashCode()의 리턴값은 같고 equals()의 리턴값은 true값이 되도록 설정
2) 구현
① 예시1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | import java.util.*; public class Example { public static void main(String[] args){ //1.객체 생성 Set<String> set = new HashSet<String>(); //2.객체 추가 : JAVA 중복, 한 번 저장함 set.add("JAVA") set.add("Database") set.add("JSP") set.add("JAVA") //3.저장 객체 수 int num = set.size(); //4.객체 가져오기 Iterator<String> iterator = set.iterator(); // 객체 수만큼 반복 while(iterator.hasNext()) { // 한 개의 객체를 가져옴 String obj = iterator.next(); System.out.println(obj); } //5.객체 삭제 // 한 개 객체 삭제 set.remove("JSP"); // 모든 객체 삭제 set.clear(); } } |
|
② 예시2
- <Menu> 클래스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | public class Menu { public String name; public int price; public Member (String name, int price) { this.name = name; this.price = price; } // name과 price 값이 같으면 true값 반환 @Override public boolean equals(Obejct obj) { if(obj instanceof Member) { Member member = (Member) obj; return member.name.equals(name) && (member.price==price); } else { return false; } } // name과 price 값이 같으면 동일한 해시코드 반환 @Override public int hashCode() { return name.hashcode() + price; } } |
- <Example> 클래스
1 2 3 4 5 6 7 8 9 10 11 12 13 | import java.util.*; public class Example { public static void main(String[] args){ Set<Menu> set = new HashSet<Menu>(); // 인스턴스가 달라도 내부 데이터가 동일하므로 1개의 객체만 저장 set.add(new Menu("김밥", 3000)); set.add(new Menu("김밥", 3000)); } } |
(2) TreeSet
1) 특징
① 이진 트리 기반
- 첫 번째로 저장된 루트 노드부터 시작, 값의 크기를 비교하면서 작은 값은 왼쪽, 큰 값은 오른쪽에 저장
( 왼쪽 노드부터 오른쪽 노드까지 오름차순, 오른쪽 노드부터 왼쪽 노드까지 내림차순 )
- 문자 저장 시, 문자의 유니코드 값을 비교
② 노드 구성
- 노드값 (value)
- 변수 : 왼쪽 노드와 오른쪽 노드 (자식 노드)를 참조하기 위한 변수 2개
③ 객체 저장 방식
- 부모 값과 비교 후 낮은 것은 왼쪽 자식 노드에 저장, 높은 것은 오른쪽 자식 노드에 저장
2) 메소드
① 검색 메소드
메소드 |
설명 |
first( ) |
제일 아래 객체 반환 |
last( ) |
제일 위 객체 반환 |
lower(E) |
주어진 객체 바로 아래 객체 반환 |
higher(E) |
주어진 객체 바로 위 객체 반환 |
floor(E) |
주어진 객체와 동등한 객체 반환, 없으면 주어진 객체 바로 아래 객체 반환 |
ceiling(E) |
주어진 객체와 동등한 객체 반환, 없으면 주어진 객체 바로 위 객체 반환 |
pollFirst( ) |
제일 아래 객체 추출 후 제거 |
pollLast( ) |
제일 위 객체 추출 후 제거 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | import java.util.TreeSet; public class Example { public void main(String[] args) { //1.Treeset 생성 TreeSet<Integer> number = new Treeset<Integer>(); //2.값 추가 number.add(new Integer(1)); number.add(new Integer(2)); number.add(new Integer(3)); number.add(new Integer(4)); number.add(new Integer(5)); //3. 검색 Integer number = null; number = number.first(); number = number.last(); number = number.lower(new Integer(3)); number = number.higher(new Integer(3)); number = number.floor(new Integer(3)); number = number.ceiling(new Integer(3)); //4.삭제 number = number.pollFirst(); number = number.pollLast(); } } |
② 정렬 메소드
메소드 |
설명 |
descendingIterator( ) |
- 내림차순 정렬 - 반환 타입 : Iterator<E> |
descendingSet( ) |
- 내림차순 정렬 : 한 번 사용 - 오름차순 정렬 : 두 번 사용 - 반환 타입 : NavigableSet<E> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import java.util.TreeSet; public class Example { public void main(String[] args) { //1.Treeset 생성 TreeSet<Integer> number = new Treeset<Integer>(); //2.값 추가 number.add(new Integer(1)); number.add(new Integer(2)); number.add(new Integer(3)); number.add(new Integer(4)); number.add(new Integer(5)); //3. 정렬 (내림차순 / 오름차순) NavigableSet<Integer> descending = number.descendingSet(); NavigableSet<Integer> ascending = descendingSet.descendingSet(); } } |
③ 범위 검색 메소드
메소드 |
설명 |
headSet (E toElement, boolean inclusive) |
- 주어진 객체 보다 아래 객체 반환 - 주어진 객체 포함 여부는 두 번째 매개값에 따름 - 반환 타입 : NavigableSet |
tailSet (E toElement, boolean inclusive) |
- 주어진 객체 보다 위 객체 반환 - 주어진 객체 포함 여부는 두 번째 매개값에 따름 - 반환 타입 : NavigableSet |
subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive ) |
- 주어진 객체 사이의 객체 반환 - 매개값 설명 : 시작 객체, 시작 객체 포함 여부, 끝 객체, 끝 객체 포함 여부 - 주어진 객체 포함 여부는 두 번째, 네 번째 매개값에 따름 - 반환 타입 : NavigableSet |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | import java.util.NavigableSet; import java.util.TreeSet; public class Example { public void main(String[] args) { //1.TreeSet 생성 TreeSet<String> Set = new TreeSet<String>(); //2. 객체 추가 TreeSet.add("가"); TreeSet.add("나"); TreeSet.add("다"); TreeSet.add("라"); TreeSet.add("마"); //3.정렬 및 검색 NavigableSet<String> range = treeSet.subset("가", true, "마", false); } } |
'프로그래밍 > Java' 카테고리의 다른 글
[JAVA 이론] JDBC 프로그래밍(DB연결) (0) | 2018.12.05 |
---|---|
[JAVA 이론] Map Collection (0) | 2018.11.18 |
[JAVA 이론] List Collection (0) | 2018.11.13 |
[JAVA 이론] 컬렉션 프레임워크(Collection Framework) (0) | 2018.11.12 |
[JAVA 이론] Iterator (반복자) (0) | 2018.10.31 |
댓글