Set에 대해 알아보자.
Set은 java.util 패키지에 존재하는 인터페이스로써 특정 코드에서 중복된 값의 허용이 있어서는 안 될 때 사용한다. 즉, Set을 사용하면 복잡한 코드구성 없이 중복된 요소들을 쉽게 제거할 수 있다는 장점이 있다.
여기서는 가장 많이 사용되는 HashSet(정렬이 안되고)과 TreeSet(오름차순 정렬 됨)을 알아본다.
set은 중복된 값을 허용하지 않을 때 사용되는데 정렬을 하지 않는 HashSet와 오름차순정렬을 해주는 TreeSet두가지가 잇다.
Set 구조는 arrayList와 같이 get() 메서드를 이용하여 특정 인덱스(요소)로 접근할 수 없기 때문에 내용을 순차적으로 얻어오기 위해서는 iterator라고 하는 반복자를 이용해야 한다. Iterator에서 하나의 객체를 가져올 때는 next()메소드를 사용하고, hasNext() 메소드는 가죠올 객체가 있으면 true를 리턴하고 없으면 false를 리턴한다.
package ex1_collection_set;
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;
public class Ex1_Set {
public static void main(String[] args) {
//컬렉션 프레임워크: 배열은 여러개의 데이터를 한번에 저장 할 수 있다는 장점이 있지만
//index의 갯수가 정해져 있기 때문에 동적인 상황에 대한 대처가 불가능하다.
//배열의 이러한 불편한 부분을 해소하기 위해 데이터들을 index와 상관없이 효율적으로 관리하기 위항
//이류로 만들어진 클래스들을 컬렉션이라고 한다.
//대표적으로 Set, Map, List가 있다.
//HashSet, TreeSet이 가장 많이 사용된다. 이 클래스들은 Set인터페이스를 구현하고 있다.
//Set클래스들은 중복된 값을 알아서 제거한다.
HashSet<String> hs = new HashSet<>();
hs.add("홍길동");
hs.add("남도일");
hs.add("코난");
hs.add("김길동");
hs.add("kim");
hs.add("김길동");//같은 값은 add를 해도 추가 되지 않는다.
hs.remove("김길동");//김길동이 포함되어 있는 방을 삭제
//hs 객체를 출력하면 저장된 모든 데이터를 한번에 확인할 수 있다.
System.out.println( hs );
System.out.println("--------------------");
//TreeSet은 오름차순 정렬기능 포함하고 있다.
TreeSet<String> ts = new TreeSet<>();
ts.add("홍길동");
ts.add("남도일");
ts.add("코난");
ts.add("김길동");
ts.add("kim");
ts.add("김길동");
System.out.println( ts );
}
}

import java.util.HashSet;
import java.util.Random;
import java.util.TreeSet;
public class Ex2_Set {
public static void main(String[] args) {
//<제너릭 타입>은 기본자료형이 아닌 클래스 구조만 추가할 수 있다.
HashSet<Integer> hs = new HashSet<>();
while (true) {
//1 ~ 45사이의 난수
int rnd = new Random().nextInt(45) + 1;
hs.add(rnd);
//he에 추가된 방의 갯수 : size()
if (hs.size()==6) {
break;//while탈출
}
}//while
System.out.println( hs );
System.out.println("------------------");
TreeSet<Integer> ts = new TreeSet<>();
while (true) {
//1 ~ 45사이의 난수
int rnd = new Random().nextInt(45) + 1;
ts.add(rnd);
//he에 추가된 방의 갯수 : size()
if (ts.size()==6) {
break;//while탈출
}
}//while
System.out.println( ts );
//wrapper 클래스의 종류
//int -> Integer
//char -> Character
//byte -> Byte
//boolean -> Boolean
//short -> Short
//long -> Long
//float -> Float
//double -> Double
}//main
}

public class Test07 {
public static void main(String[] args) {
HashSet<Integer> hs = new HashSet<>(); //Wrapper 구문
while (true) {
int v =(int)(Math.random() * 45+1);
// int v = new Random().nextInt((("큰_수" - "작은_수")+1)+"작은_수");
// int v = new Random().nextInt(45)+1;
hs.add(v);
if(hs.size()>=6)
break;
}
System.out.println("정렬이 안되는 HashSet :"+hs); // Here before HashSet example
TreeSet<Integer> ts = new TreeSet<>();
while (true) {
int v =(int)(Math.random() * 45+1);
// int v = new Random().nextInt((("큰_수" - "작은_수")+1)+"작은_수");
// int v = new Random().nextInt(45)+1;
ts.add(v);
if(ts.size()>=6)
break;
}
System.out.println("오름차순 정렬이 되는 TreeSat :"+ts); // here before TreeSet example
System.out.println(ts.subSet(10, 30)); // 위 결과에서 10보다 크고 30보다 작은수
}
}

'JAVA' 카테고리의 다른 글
| [JAVA] ArrayList (0) | 2022.08.03 |
|---|---|
| [JAVA] MAP (0) | 2022.08.03 |
| [JAVA] wait()과 notify() (0) | 2022.08.02 |
| [JAVA] getter와 setter (0) | 2022.08.02 |
| [JAVA] Thread (0) | 2022.08.01 |
댓글