Collection 을 상속받는 대표적인 3개의 인터페이스 중 하나인 Set
Set 계열
순서를 유지하지 않는 집합 = > 인덱스 번호가 없으므로 특정 위치에 직접 접근 불가능
중복을 허용하지 않음 => 효율적인 중복제거 수단
대표적인 구현체 클래스 = HashSet, TreeSet
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
37
38
39
40
41
42
43
44
45
46
47
48
49
|
// HashSet 인스턴스 생성 => Set 타입으로 업캐스팅도 가능(거의 모든 메서드가 동일하게 있음)
Set set = new HashSet(); // 인터페이스의 다형성 = 업캐스팅
//isEmpty() : 객체 내의 요소가 비어있는지 판별 (boolean)
set.isEmpty();
//size() : 객체 내의 요소 갯수 리턴
set.size();
// add(Object o) : 파라미터로 전달되는 요소 (o)를 추가
// 파라미터 : Object(모든 데이터 타입 추가 가능) : 리턴 타입 boolean
set.add(1);
set.add("이");
set.add(3.14);
// toString() : 객체 내의 모든 요소를 문자열로 결합하여 리턴
set.toString;
set.add(1); // 숫자 1은 중복이기 때문에 추가 안됨
// contains(Object o) : 요소 o 가 객체 내에 존재하는지 여부 리턴
set.contains(1); // boolean = 정수 1이 포함되어있으면 true
// remove(Object o) // 요소 삭제 및 삭제 결과 리턴
set.remove(1); // boolean = 삭제되면 true
// clear() 객체 내의 모든 요소 제거
set.clrea();
// Set 계열은 인덱스를 사용하지 않으므로 객체내의 특정 요소에 별도로 접근 불가
// => Iterator 를 사용하거나, 확장 for문을 사용하여 객체 내의 모든 요소에 접근
// 1. 확장 for문을 사용하는 방법
for(Object o : set) {
System.out.println(o);
}
// 2. Iterator(반복자) 객체를 활용 하는 방법
// = > Set 또는 List 객체의 Iterator() 메서드를 호출하여 Iterator 객체 리턴받음
// hasNext() 메서드로 꺼내올 요소 존재 여부를 확인하여 next() 메서드로 요소 꺼냄
Iterator ite = set.iterator();
while(ite.hasNext()) {
System.out.println(ite.next());
}
|
cs |
TreeSet : 기존 Set 타입의 특성에 정렬 기능을 추가한 클래스
이진트리(Binary Tree) 구조를 활용한 자료구조 사용
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
Set set2 =new TreeSet();
set2.add(5);
set2.add(9);
set2.add(1);
set2.add(3);
set2.add(7);
set2.add(3);
System.out.println(set2);
// Set 계열 또는 List 계열은 생성자에 각 객체를 전달하여 한번에 데이터 추가가 가능
Set set3 = new HashSet(set2); // set2의 요소들을 사용하여 새 HashSet 객체 생성
System.out.println(set3);
// 출력되는 결과 [1, 3, 5, 7, 9]
|
cs |
Set 계열의 객체를 사용할때 장점
배열을 사용할때와 달리 확연하게 줄어든 코드 갯수
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
package Collection;
import java.util.Set;
import java.util.TreeSet;
public class TestSet {
public static void main(String[] args) {
// 중복되지 않는 1 ~ 10 사이의 난수 5개를 생성하여 저장
// 1. 배열을 사용할 경우
int[] arr = new int[5];
int count = 0; // 저장되는 정수 갯수를 카운팅하는 변수
while(count<5) { // 저장되는 정수 갯수가 5까지 반복
// 난수 생성
int rNum = (int)(Math.random() * 10 +1); // 1~ 10 사이의 난수 생성
// for 문 사용하여 배열 내의 모든 데이터와 생성된 난수 비교하여 중복 체크
boolean isDuplicate = false; // 중복 체크 결과를 저장할 변수
for(int i = 0; i<arr.length ; i++) {
if(arr[i] == rNum) { // 생성된 난수와 중복되는 정수가 있을 경우
isDuplicate = true;
}
}
if(!isDuplicate) {
//count에 해당하는 인덱스에 난수 저장
arr[count] =rNum;
count++;
}
}
for(int i = 0; i<arr.length; i++) {
System.out.print(arr[i]+ " ");
}
System.out.println();
System.out.println("===================================");
// 2. Set 계열 객체를 사용하여 난수 저장
Set set = new TreeSet();
// 저장되는 요소(난수) 갯수가 5개가 될 때 까지 반복
While(set.size()<5){
int rNum = (int)(Math.random() * 10 +1); // 1 ~10 사이의 난수 생성
set.add(rNum);
}
System.out.println(set);
|
cs |
'Language > Java' 카테고리의 다른 글
Wrapper 클래스 (0) | 2020.06.21 |
---|---|
List 인터페이스-자료구현(Collection Framework) (0) | 2020.06.18 |
equals(), toString() (0) | 2020.06.17 |
인터페이스(Interface) (0) | 2020.06.11 |
상수 (0) | 2020.06.11 |