컬렉션 프레임워크
List, Set, Map 가운데
지난 List 내용 https://notion6780.tistory.com/64
⭐Set 계열을 알아본다.
주요 특징
1. 중복방지
2. 값의 유일성 보장
주요명령어
equals() hashcode()를 사용
👍'주머니' 키워드를 기억하면 좋다.
package _colloections;
import java.util.*;
/**
5.7
컬렉션프레임워크2
Set 계열
*/
public class MySetTest {
//main
public static void main(String[] args) {
//계층 구조 확인
Set<Integer> mTestSet = new HashSet<>(); // 업캐스팅된 상태
//사용방법
/*
해시셋
HashSet
중복된 요소를 허용하지 않고
순서가 없는 자료구조다.
*/
HashSet<Integer> numberSet = new HashSet<>();
//요소 추가하기.. add
numberSet.add(111);
numberSet.add(111); // 중복값.. 추가되지 않는다.
numberSet.add(222);
numberSet.add(333);
numberSet.add(444);
System.out.println("추가후 요소크기:" + numberSet.size()); //4개
//요소 제거하기.. remove
numberSet.remove(1);
/*
1이라는 요소 자체를 삭제
존재하지 않는 요소를 삭제해도 오류 발생 없다.
*/
System.out.println("삭제후 요소크기:" + numberSet.size()); //4개
System.out.println("===== ===== ===== ===== ");
/*
자료구조는 반복문과 함께 많이 사용된다.
하지만 index 번호가 없으므로
기존의 for 문은 사용할 수 없다.
for (int i = 0; i < 10 ; i++) {}
향상된 for문을 활용해야 한다.
이를 통해 Set 요소를 순회시킬 수 있다.
*/
for (Integer num : numberSet) {
System.out.println("num 값:" + num);
}
System.out.println("===== ===== ===== ===== ");
/*
Set 계열을
Iterator 타입으로 변환해서 순회시킬 수도 있다.
다만 Iterator도 인덱스 개념이 없는데...
*/
Iterator<Integer> iter = numberSet.iterator(); // Set 계열을 Iterator 계열로 형 변환
while (iter.hasNext()) { // hasNest : 다음 요소가 있으면 true 반환
System.out.println("값:" + iter.next());
}
System.out.println("===== ===== ===== ===== ");
/*
Set 계열 자료구조 선언
정수값만 담을 수 있고 중복 불가
*/
HashSet<Integer> lottoNumbers = new HashSet<>();
while (lottoNumbers.size()<6) {
lottoNumbers.add(getRandomNumber()); //로또함수호출
}
System.out.println("무작위로 선택된 로또번호 6개 "+ lottoNumbers.toString());
System.out.println("===== ===== ===== ===== ");
/*
HashSet 데이터 타입을
ArrayList 객체 생성시..
즉, 생성자에 인자값을 넣을 수 있도록 설계
List자료구조에서는 정렬이 편해진다.
*/
ArrayList<Integer> sortedList = new ArrayList<>(lottoNumbers);
Collections.sort(sortedList); //정렬하기
System.out.println("정렬된 로또번호 6개 " + sortedList);
System.out.println("===== ===== ===== ===== ");
}//end of main
//무작위 1부터 45까지 랜덤번호 생성 함수
public static int getRandomNumber() {
Random random = new Random();
return random.nextInt(45) + 1;
}
}//end of class
예제 CRUD 구현)
package _colloections;
import java.util.HashSet;
import java.util.Scanner;
/**
* 5.7
* 컬렉션프레임워크2
* Set 계열
*/
public class UniqueUserIDSystem {
/*
요구사항
사용자가 키보드로 입력한 ID 데이터를 다량 저장해야 한다.
해당 데이터는 고유데이터
해당 데이터는 메모리상에서 관리한다.
*/
//member
private HashSet<String> resiteredIDs;
//constructor
public UniqueUserIDSystem() {
resiteredIDs = new HashSet<>();
/*
전체출력 테스트를 위한 샘플데이터 - 추후삭제
*/
resiteredIDs.add("홍길동");
resiteredIDs.add("임꺽정");
resiteredIDs.add("장길산");
}
//사용자 ID등록
public boolean addUserID(String userID) {
return resiteredIDs.add(userID);
/*
저장되면 true 호출
중복값이면 false 호출
*/
}//
/*
사용자 ID 출력하는 메서드 만들어본다.
리턴값은 필요없으므로 void
매개변수 필요한가? No
*/
public void showAll() {
/*
resiteredIDs를 순회해서 콘솔창에 출력하는 기능 필요
for 구문이나 iterator 활용 가능
*/
//hashSet 안에 요소가 없다면
if (resiteredIDs.isEmpty()) {
System.out.println("🤷♂️등록된 ID가 없음");
return;
//실행의 제어권 반납해 뒤 코드들이 의미없이 실행되는 것 방지
}
for (String id : resiteredIDs) {
System.out.println("id: " + id);
}
System.out.println("총id수: " + resiteredIDs.size());
}
//시스템 실행
public void start() {
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("사용하고 싶은 ID를 입력하세요. " +
"종료하라면 'exit' 입력");
String input = scanner.nextLine().trim(); // trim() 공백제거
/*
빈 입력 처리
사용자가 키보드에서 값을 넣지 않고 엔터를 치는 경우
방어코드를 짜본다.
*/
if (input.isEmpty()) {
System.out.println("ID를 입력해주세요.");
continue;
}
if ("exit".equals(input)) {
System.out.println("😎시스템 종료");
break;
}
if ("show".equals(input)) {
showAll();
}
boolean isRestered = addUserID(input);
if (isRestered) {
System.out.println("👍새로운 ID 등록");
} else {
System.out.println("💀이미 등록된 ID 입니다.");
}
}//while
scanner.close();
}//start
//main
public static void main(String[] args) {
UniqueUserIDSystem idSystem = new UniqueUserIDSystem();
idSystem.start();
}//end of main
}//end of class
'Java' 카테고리의 다른 글
Java자바 Swing 예제. 플래포머 게임 만들기 4.천장구현 (0) | 2025.05.08 |
---|---|
컬렉션 프레임워크 3. Map 키값과 밸류값이 '한쌍' (1) | 2025.05.07 |
자바 Swing 예제. 플래포머 게임 만들기 3.바닥구현 (0) | 2025.05.07 |
컬렉션 프레임워크. 배열보다 나은 데이터 정리법 1. List (0) | 2025.05.02 |
자바 Swing 예제. 플래포머 게임 만들기 1. 설계 (0) | 2025.05.01 |