728x90
★ 컬렉션
1. List 계열
- 순서가 있는 집합
- 첨자(방번호)
- 데이터 중복을 허용한다.
2. Map 계열
- 순서가 없는 집합
- 키
- 데이터 중복을 허용한다.
3. Set 계열
- 순서가 없는 집합
- 식별자가 없다. > 방과 방을 구분할 수 없다.
- 데이터 중복을 허용하지 않는다.
★ HashSet
- 기본 요소
- 소스코드
private static void m1() {
HashSet<String> set = new HashSet<String>();
//1. 요소 추가하기
set.add("사과");
set.add("딸기");
set.add("바나나");
//2. 요소 개수
System.out.println(set.size());
//3. 덤프
System.out.println(set);
//4. 중복된 값 추가하기
boolean result = set.add("사과"); //안들어감(기존에 사과가 있어서..)
System.out.println(result);
System.out.println(set);
//5. 검색
set.contains(set.contains("사과"));
//6. 삭제
set.remove("사과");
System.out.println(set);
//7. 요소 읽기?? > 탐색 통해서
for(String item : set) { //for문 시작할때 이터레이터를 생성한다.
System.out.println(item);
}
System.out.println();
System.out.println();
//위의 향상된 for문의 탐색 > 원본
//이터레이터 > 데이터 집합을 탐색하는 도구 > 탐색기
//*** 끝까지 읽고 나면 다시 읽을 수 없다.
Iterator<String> iter = set.iterator();
while(iter.hasNext()) {
System.out.println(iter.next());
}
//이터레이터 > 다시 읽으려면 다시 선언을 해줘야함.
iter = set.iterator();
System.out.println(iter.next());
// System.out.println(iter.hasNext());
// System.out.println(iter.next());
//
// System.out.println(iter.hasNext());
// System.out.println(iter.next());
// ArrayList<String> list = new ArrayList<String>();
//
// list.add("사과");
// list.add("사과");
// list.add("사과");
}
HashSet 예제 1) 로또 번호 > 중복 되지 않는 난수
- ArrayList를 사용하였을 경우
ArrayList<Integer> lotto = new ArrayList<Integer>();
for(int i =0; i<6; i++) {
int n = (int)(Math.random()*45)+1;
if(!lotto.contains(n)) {
lotto.add(n);
}else {
i--;
}
}
- Hash set을 사용하였을 경우
HashSet<Integer> lotto2 = new HashSet<Integer>();
while(lotto2.size() < 6) {
int n = (int)(Math.random()*45)+1;
lotto2.add(n); //HashSet은 자율적으로 중복값 배제
}
System.out.println(lotto2);
HashSet 예제 2) 경품 행사
- 소스코드
private static void m3() {
//마트 경품 행사
//1등 : 아이패드
//2등 : 에어팟
//3등 : 참치세트
//4등 : 김세트
//5등 : 맥스봉
String[] list = {"홍길동", "아무개", "하하하", "호호호", "후후후", "유재석", "강호동", "박명수", "정형돈", "조세호"};
//추첨
//1. 중복 당첨 허용(O) > ArrayList
//2. 중복 당첨 허용(X) > HashSet
for(int i=0; i<5; i++) {
System.out.println(list[(int)(Math.random()*10)]);
}
System.out.println();
HashSet<String> set = new HashSet<String>();
while(set.size() < 5) {
set.add(list[(int)(Math.random()*10)]);
}
System.out.println(set);
}
728x90
'자바' 카테고리의 다른 글
JAVA STEP 40. File/Directory 조작 (0) | 2023.02.24 |
---|---|
JAVA STEP 39. Hashset 직접 구현하기 (0) | 2023.02.24 |
JAVA STEP 37. HashMap 직접 구현하기 (0) | 2023.02.24 |
JAVA STEP 36. 컬렉션(HashMap) (0) | 2023.02.24 |
JAVA STEP 35. Queue&Stack 직접 구현하기 (0) | 2023.02.23 |