일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- dependency
- 루프
- 컬렉션
- 언박싱
- 싱글턴
- 제네릭
- 무한
- 클래스
- 박싱
- https://start.spring.io
- Short
- wrapper
- 내장객체
- suvlet
- start.spring.io
- 자동형변환
- 메소드
- 콜렉션
- 인텔리제이
- 빌드
- 스프링
- 싱글톤
- maven
- Scanner
- bootstrap
- boxing
- Java
- 제너릭
- unboxing
- Jenkins
Archives
- Today
- Total
Developer Gonie
[4주차] 69. 컬렉션, Set 인터페이스를 상속받은 HashSet 타입(순서,index X, 중복데이터 X)*** 본문
K-DigitalTraining 강의/1. Java
[4주차] 69. 컬렉션, Set 인터페이스를 상속받은 HashSet 타입(순서,index X, 중복데이터 X)***
이대곤 2022. 6. 2. 14:52* HashSet 클래스란?
Set 인터페이스를 구현하여 만들어진 클래스로, 객체만을 저장 가능하며
Set의 특징을 그대로 상속받아 순서(index)가 없고, 중복 데이터의 입력이 불가능하다. ( ArrayList와 완전 반대)
중복 데이터의 입력이 불가능해 같은 값을 넣으려고 하면 에러는 안나지만 그 시도가 무시된다.
혹시라도 알고리즘 문제 해결 과정중에 중복되는 데이터를 제거하고 싶다면 이걸 사용하면 좋을거 같다.
과거에 예제를 해결하면서 중복없는 로또번호 6개를 만드는게 있었는데 이걸 활용하면 딱이다.
* HashSet 에서 자주 사용되는 메소드
HashSet<타입> hs = new HashSet<타입>();
hs.add(객체); // 원소추가
hs.remove(객체); // 원소제거
hs.clear(객체); // 원소 전체 제거
hs.contains(객체); // 특정 원소 존재여부 true/false 반환
hs.isEmpty(); // 원소 존재여부 true/false 반환
//HashSet에는 get() 메서드가 없어서 일반 for 문으로는 요소 출력이 불가능하다.
for(타입 s : hs) {
System.out.println(s);
}
//Enumeration 타입을 이용해 모든 원소를 출력하는 방법
Enumeration<타입> e = Collections.enumeration(hs); // Vector와 달리 ArrayList, HashSet은 elements() 메소드를 가지지 않아 Collections 클래스의 enumeration() 메소드를 이용해야 함, 이 클래스는 list set 공통 상위의 인터페이스인 Collection과 다름
while (e.hasMoreElements()) {
System.out.println(e.nextElement());
}
Iterator<타입> it = hs.iterator(); // Iterator는 인터페이스임. 따라서 객체를 만들순 없지만, 객체를 받을 순 있음.
while(it.hasNext()) {
String j = it.next();
System.out.println(j + " ");
}
String 객체를 HashSet에 넣어보는 코드
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Iterator;
public class Ex09_07_HashSet {
public static void main(String[] args) {
HashSet<String> hs = new HashSet<String>();
hs.add("banana");
hs.add("ornage");
hs.add("banana"); // 에러는 안나는데 중복이 허용되지 않기에 안들어간다
hs.add("melon");
System.out.println("데이터를 넣고 난 뒤 size: " + hs.size());
System.out.println(hs); // hs.toString()
System.out.println();
//HashSet에는 get() 메서드가 없어서 일반 for 문으로는 요소 출력이 불가능하다.
for(String s : hs) {
System.out.println(s);
}
System.out.println();
//Enumeration<String> en = hs.elements();
//HashSet은 elements 메서드가 없어서 Enumeration 을 사용할 수가 없다.
Iterator<String> it = hs.iterator(); // Iterator는 인터페이스임. 따라서 객체를 만들순 없지만, 객체를 받을 순 있음.
while(it.hasNext()) {
String j = it.next();
System.out.println(j + " ");
}
System.out.println();
hs.remove("ornage"); // 순서(index)가 없어서 인덱스를 입력하는 방식이 아닌 이 방법을 사용함
System.out.println(hs);
System.out.println();
System.out.println(hs.contains("banana"));
System.out.println(hs.isEmpty());
System.out.println();
//모든 요소를 싹 다 지우는 것
hs.clear();
System.out.println("clear 이후 size: " + hs.size());
}
}
실행결과
데이터를 넣고 난 뒤 size: 3
[banana, ornage, melon]
banana
ornage
melon
banana
ornage
melon
[banana, melon]
true
false
clear 이후 size: 0
HashSet을 이용해 중복없는 6개의 로또번호를 만들어내는 코드
import java.util.HashSet;
import java.util.Iterator;
public class Ex09_08_HashSet {
public static void main(String[] args) {
//로또번호 발생시킬 때 중복되는 수는 무시하기 때문에 이게 더 간단한 방법이었음.
HashSet<Integer> hs = new HashSet<Integer>();
int cnt = 0;
while(true) {
int num = (int)(Math.random()*10) + 1;
hs.add(num); // 중복되는 숫자를 넣는거라면 시도해도 무시됨
cnt++;
if(hs.size() == 6)
break;
}
System.out.println(hs); //hs.toString()은 원소들을 정렬된 상태로 출력해준다.
System.out.println("중복없는 6개의 로또번호가 몇번만에 완성?: " + cnt);
// Iterator도 정렬된 순서대로 뽑혀짐
Iterator<Integer> it = hs.iterator(); // Iterator는 인터페이스임. 따라서 객체를 만들순 없지만, 객체를 받을 순 있음.
while(it.hasNext()) {
int j = it.next();
System.out.print(j + " ");
}
}
}
실행결과
[1, 3, 4, 5, 7, 8]
중복없는 6개의 로또번호가 몇번만에 완성?: 10
1 3 4 5 7 8
'K-DigitalTraining 강의 > 1. Java' 카테고리의 다른 글
[4주차] 71. Thread, 동시연산이 가능하도록 만드는 쓰레드 사용법(완성) (0) | 2022.06.03 |
---|---|
[4주차] 70. 컬렉션, Map 인터페이스를 상속받은 HashMap 타입(순서,index X, key는 중복 X, value는 중복 O)*** (0) | 2022.06.02 |
[4주차] 68. 컬렉션, List 인터페이스를 상속받은 Vector 타입(순서,index O, 중복데이터 O) (0) | 2022.06.02 |
[4주차] 67. 컬렉션, List 인터페이스를 상속받아 구현된 ArrayList 타입(순서,index O, 중복데이터 O)*** (0) | 2022.06.02 |
[4주차] 66. 컬렉션, 배열의 한계점을 보완하여 동적으로 객체들을 관리하기 위한 클래스들*** (0) | 2022.06.02 |
Comments