Set
package ex6_set;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
public class Ex1_set {
public static void main(String[] args) {
//set
//중복된 값을 허용하지 않는다
//index가 없어 개별의 요소에 접근이 불가능
Set<String> hs1 = new HashSet<>(); //HashSet 생성
//HashSet 데이터 추가
hs1.add("b");
hs1.add("a");
hs1.add("f");
hs1.add("d");
System.out.println(hs1);
//Set은 중복되는 값을 추가할 수 없다
hs1.add("a");
hs1.add("b");
hs1.add("c");
System.out.println(hs1);
//Set의 요소 개수
System.out.println("hs1의 요소 개수 : "+hs1.size());
//Set에 해당 요소가 있는지 검증
System.out.println("a의 유무 : "+hs1.contains("a"));
//Set 요소 제거
hs1.remove("f");
System.out.println(hs1);
//Set 모든 요소 제거
//hs1.removeAll(hs1);
hs1.clear();
System.out.println(hs1);
//1~45사이의 난수를 생성하여 hs2에 6개 채우기
Set<Integer> hs2 = new HashSet<>();
Random rnd = new Random();
int num;
while(true) {
num = rnd.nextInt(45)+1;
hs2.add(num);
if(hs2.size()==6)
break;
}
System.out.println("로또 번호 : "+hs2);
//Set -> 배열로 변환
Integer arr[] = hs2.toArray(new Integer[0]);
//Integer[0] : 배열의 크기를 0으로 해두면 Set의 크기만큼 자동으로 잡아준다.
for(Integer i : arr)
System.out.printf("%d ",i);
}
}
Red-Black Tree
package ex6_set;
import java.util.Arrays;
import java.util.TreeSet;
public class Ex2_set {
public static void main(String[] args) {
//이진 탐색 트리에서 성능을 향상시킨 레드-블랙 트리
//부모노드보다 작은 값은 왼쪽, 큰 값은 오른쪽에 배치해
//데이터의 추가나 삭제시 트리가 한쪽으로 치우치지 않도록 균형을 맞춤
TreeSet<Integer> set1 = new TreeSet<>(); //TreeSet 생성
TreeSet<Integer> set2 = new TreeSet<>(Arrays.asList(1,2,3)); //초기값을 지정한 TreeSet
//요소 추가
set1.add(7); //뿌리 노드
set1.add(4);
set1.add(9);
set1.add(1);
set1.add(5);
System.out.println("set1 : "+set1);
//요소 삭제
set1.remove(1); //값 1 제거
System.out.println("1 삭제 : "+set1);
//크기 구하기
System.out.println("set1 사이즈 : "+set1.size());
//요소 출력
System.out.println("최소값 : "+set1.first()); //최소값
System.out.println("최대값 : "+set1.last()); //최대값
System.out.println("5의 다음 요소 : "+set1.higher(5)); //인자보다 큰 데이터중 가장 작은 값, 없으면 null
System.out.println("7의 이전 요소 : "+set1.lower(7)); //인자보다 작은 데이터중 가장 큰 값, 없으면 null
//모든 요소 제거
set1.clear();
}
}
Iterator
package ex7_iterator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
public class Ex1_iterator {
public static void main(String[] args) {
//iterator 반복자
//컬렉션의 요소를 순회하면서 하나씩 추출하는데 사용
//hasNext() : 다음에 순회할 데이터의 유무 확인
//next() : 다음 위치의 데이터로 이동하여 값을 반환
List<Integer> list = new ArrayList<>();
for(int i=0;i<10;i++)
{
list.add(i);
}
Iterator<Integer> iter = list.iterator();//순회하려는 List의 자료형과 일치
System.out.printf("list 요소 출력 : ");
while(iter.hasNext()) {
System.out.printf("%d ",iter.next());
}
Set<Integer> set = new HashSet<>();
for(int i = 1;i<=10;i++) {
set.add(i);
}
System.out.println();
Iterator<Integer> iter2 = set.iterator();
System.out.printf("set 요소 출력 : ");
while(iter2.hasNext()) {
System.out.printf("%d ", iter2.next());
}
System.out.println();
List<Integer> list2 = new ArrayList<>();
list2.add(5);
list2.add(2);
list2.add(4);
list2.add(9);
list2.add(1);
list2.add(8);
list2.add(3);
list2.add(6);
list2.add(10);
list2.add(7);
System.out.println(list2);
Collections.sort(list2); //요소 정렬
System.out.println(list2);
Collections.shuffle(list2);
System.out.println(list2);//요소 셔플
}
}
예제
package ex8_work;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Set;
public class Bingo {
//컬렉션을 이용해 5*5 랜덤 빙고판 만들기
//1~50사이의 난수중 25개를 뽑아 HashSet에 추가
//ArrayList<>(set); -> set객체를 리스트로 변환
public static void main(String[] args) {
Random rnd = new Random();
Set<Integer> bingo = new HashSet<>();
while(true) {
bingo.add(rnd.nextInt(50)+1);
if(bingo.size()==25)
break;
}
List<Integer> bingo2 = new ArrayList<>(bingo);
Collections.shuffle(bingo2);
for(int i=0; i<bingo2.size(); i++) {
System.out.printf("%02d \t",bingo2.get(i));
if((i+1)%5==0)
System.out.printf("\n\n\n");
}
}
}