HashSet
List와 다르게 중복값을 허용하지 않고 index가 없어 개별 요소에 접근불가
//HashSet 생성
HashSet<String> hs1 = new HashSet<>();
//HashSet에 데이터(요소)추가하기
hs1.add("b");
hs1.add("a");
hs1.add("f");
hs1.add("d");
System.out.println(hs1); //정렬기능없음
hs1.add("a");
hs1.add("b");
System.out.println(hs1); //중복되는 값의 추가 불가능
//Set에 들어있는 요소의 개수 확인하기
System.out.println("hs1의 요소의 개수 : "+hs1.size());
//Set에 해당요소가 들어있는지 검증하기
System.out.println("a의 유무 : "+hs1.contains("a")); //index가 없기때문에 꺼내올 수는 없음
//Set의 요소 제거하기
hs1.remove("f");
System.out.println(hs1);
//Set의 모든요소 제거하기
hs1.clear();
System.out.println(hs1);

++)hs1.removeAll(hs1)
//자료형이 boolean. 리스트의 모든 요소를 삭제하고 결과가 필요한 경우 사용. 잘 삭제되면 true를, 아니면 false반환. 출력문 안에 넣어서 쓴다.

1️⃣1~45사이의 난수를 생성하여 6개 숫자 만들기
HashSet<Integer> hs2 = new HashSet<>();
while(true) {
Random rnd = new Random();
int randomNumber = rnd.nextInt(45)+1;
hs2.add(randomNumber); //Set은 중복되지 않기때문에 중복검증을 하지 않아도되는 장점
if(hs2.size()==6) {
break;
}
}
System.out.println(hs2);

**Set을 배열형태로 변환하는 방법**
Integer[ ] arr = 해쉬셋객체명.toArray(new Integer[0]);

2️⃣ 컬렉션을 이용하여 5*5 랜덤 빙고판을 만들자. (1~50 사이의 난수 중 25개)
힌트) Set객체를 ArrayList로 변환하면 셔플메서드 사용 가능
HashSet<Integer> set = new HashSet<>();
while (true) {
Random rnd = new Random();
int randomNumber = rnd.nextInt(50) + 1;
set.add(randomNumber); //Set에 랜덤숫자 채우는데
if (set.size() == 25) { //25개만
break;
}
}
System.out.println(set); //인덱스없는 Set상태->섞을 수 없음..
ArrayList<Integer> list = new ArrayList<>(set); //Set->List로 변경
System.out.println(list); //List상태
Collections.shuffle(list);
System.out.println(list); //List상태+섞기 완료
int n = 0; //외부변수
for (int i = 0; i < 5; i++) { //5*5 배열에 넣어주기위해
for (int j = 0; j < 5; j++) { //이중for문 사용
System.out.printf("%02d ",list.get(n++));
}
System.out.println();
}

**Set을 List형태로 변환하는 방법**
ArrayList<Integer> list = new ArrayList<>(set);
TreeSet
이진탐색트리 중에서도 성능을 향상시킨 레드-블랙트리로 구현되어있다.
레드-블랙트리에서 부모노드보다 작은 값을 가지는 노드는 왼쪽으로, 큰 값을 가지는 노드는 오른쪽에 배치하여
데이터의 추가나 삭제시 트리가 한쪽으로 치우치지 않도록 균형을 맞춘다.

//TreeSet생성
TreeSet<Integer> set1 = new TreeSet<>();
**TreeSet<Integer> set2 = new TreeSet<>(Arrays.asList(1,2,3)); //초기값 지정한 TreeSet도 가능하다. 1,2,3이라는 요소를 가진 리스트를 만들어주겠다는 의미
//TreeSet에 값 추가하기
set1.add(7); //뿌리노드가 됨
set1.add(4);
set1.add(9);
set1.add(1);
set1.add(5);
System.out.println(set1);
//TreeSet의 크기 구하기
System.out.println("TreeSet의 크기 : "+set1.size());
//TreeSet의 요소 삭제하기
set1.remove(1); //값 1 제거
System.out.println(set1);
//모든 요소 제거하기
set1.clear();
System.out.println(set1);

//TreeSet의 요소 출력하기
TreeSet<Integer> set = new TreeSet<>(Arrays.asList(4,2,3,1,9));
System.out.println(set);
System.out.println(set.first()); //최소값 반환
System.out.println(set.last()); //최대값 반환
System.out.println(set.higher(3)); //인자보다 큰 데이터중 최소값, 없으면 null
System.out.println(set.lower(3)); //인자보다 작은 데이터중 최대값, 없으면 null

'JAVA' 카테고리의 다른 글
[JAVA] 컬렉션 프레임워크 _ Map컬렉션(HashMap) (0) | 2023.09.02 |
---|---|
[JAVA] 컬렉션 프레임워크 _ 반복자(Iterator), 정렬 (0) | 2023.09.01 |
[JAVA] 컬렉션 프레임워크 _ List컬렉션(ArrayList) (0) | 2023.08.31 |
[JAVA] 제네릭(Generic) (0) | 2023.08.30 |
[JAVA] 예외 던지기, 임의의 예외처리, 사용자정의 예외처리 (0) | 2023.08.30 |