저장 순서가 유지되지 않으며 중복 객체를 저장할 수 없는 자료구조
중복 데이터 확인을 위해 equals( ) 메서드가 오버라이딩 되어야 하며,
null도 중복을 허용하지 않는다.
⭐ HashSet 사용 선행조건
저장하려는 객체에 반드시 equals( ), hashCode( )가
오버라이딩 되어있어야 한다!
🌼 해시함수 : 입력된 단어를 지정된 길이의 문자열로 변환하는 함수
🌼 hashCode( ) : 데이터가 다르면 중복되지 않는 숫자를 만드는 메서드
add(E e) : Set의 맨 끝에 객체 추가
set.add(new Food("닭떡볶이"));
iterator( ) : 저장된 객체를 하나씩 가져오는 반복 접근자
isEmpty( ) : 컬렉션이 비어있으면 true, 아니면 false 반환
size( ) : Set에 저장된 객체 수 반환
키(key)와 값(value)으로 구성되어 있는 데이터를 모아둔 객체
key는 중복을 허용하지 않으며 순서가 유지되지 않는다. (= Set)
value는 key에 의해 서로 구분되기 때문에 중복이 가능하다. (= List)
HashMap 클래스 ⭐ 가장 기초가 되는 Map 클래스
HashSet과 마찬가지로, key에 해당하는 객체는 반드시
equals( ), hashCode( )가 오버라이딩 되어있어야 한다.
Map<K, V> map = new HashMap<K, V>();
Properties 클래스
K(key), V(value)가 모두 String으로 제한된 Map
프로퍼티(*.properties) 파일을 읽어올 때 주로 사용하며,
파일 입출력에 특화되어 있다.
put(K key, V value) : 주어진 키와 값을 추가
map.put("LACHIA", new Dancer("가비", 93));
entrySet( ) : 키와 값의 쌍으로 구성된 모든 Map.Entry 객체를 set에 담아서 리턴
get(Object key) : 주어진 키의 값을 리턴
list.get("YGX")
isEmpty( ) : 컬렉션이 비어있으면 true, 아니면 false 반환
keySet( ) : 모든 키를 Set 객체에 담아서 리턴
size( ) : 저장된 키의 총 개수를 리턴
values(Object key) : 저장된 모든 값을 Collection에 담아서 리턴
간이 로또번호 생성기 : Set에 저장된 값을 하나씩 반복 접근
public void example1() {
Set<Integer> lotto = new HashSet<Integer>();
while (true) {
int random = (int)(Math.random() * 45 + 1);
lotto.add(random);
if (lotto.size() == 6) break;
}
// Iterator : 컬렉션에 저장된 객체를 순서대로 하나씩 접근하는데 사용하는 인터페이스
Iterator<Integer> it = lotto.iterator();
// -> lotto 집합(Set)에 저장된 내용들을 하나씩 꺼내올 수 있는 형태로 변환됨
System.out.print("생성된 번호 : [ ");
while (it.hasNext()) { // hasNext() : 다음 꺼내올 값이 있으면 true
int num = it.next(); // next() : 다음 값을 얻어옴
System.out.print(num + " ");
}
System.out.print("]");
}
public void example2() {
Set<Integer> lotto = new HashSet<Integer>();
while (true) {
int random = (int)(Math.random() * 45 + 1);
lotto.add(random);
if (lotto.size() == 6) break;
}
System.out.print("생성된 번호 : [ ");
// for (하나씩 꺼내어 저장할 변수 : 컬렉션 또는 배열명)
for (int num : lotto)
System.out.print(num + " ");
System.out.print("]");
}
천 원 단위로 돈을 입력 받아 로또 번호를 자동으로 생성하여 List에 저장 후 출력하기
public void example4() {
Scanner sc = new Scanner(System.in);
// 자동 생성된 번호들을 저장할 List 생성
List<Set<Integer>> list = new ArrayList<Set<Integer>>();
// -> Integer만 저장하는 Set을 저장하는 List 생성
System.out.print("금액 입력(천 원 단위) : ");
int price = sc.nextInt();
for (int i = 0; i < price / 1000; i++) {
// 1) 로또 번호를 생성 (Set)
Set<Integer> lotto = new HashSet<Integer>();
while (true) {
int random = (int)(Math.random() * 45 + 1);
lotto.add(random);
if (lotto.size() == 6) break;
}
// 2) 생성된 로또 번호를 List에 추가
list.add(lotto);
}
// 3) 향상된 for문으로 List에 저장된 데이터 순서대로 출력
for (Set<Integer> lotto : list)
System.out.println(lotto);
sc.close();
}