🕶️ HashSet
Set 인터페이스를 구현한 컬렉션이다.
특징
- 순서를 보장하지 않는다
- 중복을 허용하지 않는다
get()사용 불가
주요 메서드
HashSet<String> set = new HashSet<>();
set.add("값"); // 추가
set.remove("값"); // 제거
이럴 때 사용!
중복 없이 데이터를 관리할 때 : 예를 들어 장바구니에 같은 상품이 중복으로 담기는 걸 방지할 때 활용할 수 있다.
⭐️ 구글에서 가져온 예시
import java.util.HashSet;
class Main {
public static void main(String[] args) {
HashSet<Integer> evenNumber = new HashSet<>();
// Using add() method
evenNumber.add(2);
evenNumber.add(4);
evenNumber.add(6);
System.out.println("HashSet: " + evenNumber);
HashSet<Integer> numbers = new HashSet<>();
// Using addAll() method
numbers.addAll(evenNumber);
numbers.add(5);
System.out.println("New HashSet: " + numbers);
}
}
✔️ 실행 결과
HashSet: [2, 4, 6]
New HashSet: [2, 4, 5, 6]
😎 HashMap
Map 인터페이스를 구현한 컬렉션이다.
특징
키(Key) - 값(Value)구조로 데이터를 저장한다- 키는 중복 불가, 값은 중복 가능
- 순서를 보장하지 않는다
- 키가 중복되면 값이 덮어씌워진다
주요 메서드
HashMap<String, Integer> map = new HashMap<>();
map.put("키", 값); // 추가
map.get("키"); // 조회
map.remove("키"); // 제거
map.keySet(); // 키 확인
map.values(); // 값 확인
이럴 때 사용!
상품명과 수량처럼 짝을 이루는 데이터를 관리할 때 — 장바구니에서 상품명: 수량 형태로 저장할 때 활용할 수 있다.
⭐️ 구글에서 가져온 예시
import java.util.*;
public class Scaler {
public static void main(String[] args)
{
HashMap<String, Integer> hashMap = new HashMap<>();
// 해시맵 생성 (이름 -> 문자열, 셀 번호 -> 정수)
hashMap.put("Boyd Redding", 140);
hashMap.put("Andy Dufresne", 142);
hashMap.put("Heywood", 146);
hashMap.put("Brooks", 145);
hashMap.put("Tommy", 148);
// 향상된 for 루프를 사용하여 해시맵을 순회
//Iterating keys
for(String name: hashMap.keySet())
{
//Printing keys and their corresponding values
System.out.println(name + ":" + hashMap.get(name));
}
//Map.Entry as a reference to the entrySet elements (key -> value)
for(Map.Entry<String, Integer> entry: hashMap.entrySet())
{
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
}
✔️ 실행 결과
Printing elements with keySet method:
Boyd Redding:140
Andy Dufresne:142
Heywood:146
Brooks:145
Tommy:148
Printing elements with entrySet method:
Boyd Redding:140
Andy Dufresne:142
Heywood:146
Brooks:145
Tommy:148
ArrayList vs HashSet vs HashMap 비교ArrayList
ArrayList
순서 있고 중복 허용되는 목록이 필요할 때 사용
HashSet
중복 없는 목록이 필요할 때
HashMap
상품명: 수량 처럼 연결된 데이터를 관리할 때
🛒 HashMap으로 장바구니 구현하기
장바구니에 같은 상품이 중복으로 담기면 안 되고,
상품마다 수량을 관리해야 하기 때문에 `HashMap`을 활용했다.
CommerceSystem에 먼저 장바구니 활용을 해보고 잘 되면 그 때 메서드를 분리할 계획이다.
CommerceSystem 필드에 HashMap을 추가했다.
private HashMap<Product, Integer> cart = new HashMap<>();
- `Key` → `Product` (상품 객체)
- `Value` → `Integer` (수량)
Value 에는 int 같은 기본 자료형이 올 수 없다.
그래서 int 대신 래퍼클래스(Wrapper Class)인 Integer을 사용한다.
선택한 상품: iPhone 15 | 1,350,000원 | Apple의 최신 스마트폰 | 재고: 30개
위 상품을 장바구니에 추가하시겠습니까?
1. 확인 2. 취소
1 <-
// 1번을 누르면 나오는 메뉴입니다.
iPhone 15가 장바구니에 추가되었습니다.
이렇게 출력되게 만들어 볼 것이다.
🕶️ HashMap 메서드
| 메서드 | 역할 |
| put(key, value) | 추가 |
| get(key) | 조회 |
| remove(key) | 제거 |
| containsKey(key) | 키(key) 존재 여부 확인 |
HashMap 메서드를 사용해 만들어주었다.
System.out.print("입력 : ");
int addCart = scanner.nextInt();
// 1 선택 : 추가 / 2 선택 : 취소 continue; 그 외 : 올바른 숫자를 입력하세요
// 1이면 추가
if (addCart == 1) {
// 여기서 이미 있으면 + 1 담아주기(put 메서드)
if (cart.containsKey(selectedProduct)) {
cart.put(selectedProduct, cart.get(selectedProduct) + 1);
System.out.println(cart.get(selectedProduct));
// 없으면 그냥 한 개 담아주기
} else {
cart.put(selectedProduct, 1);
}
System.out.println(selectedProduct.getProductName() + "가 장바구니에 추가되었습니다.");
// 만약 2를 선택하면 취소
} else if (addCart == 2) {
continue;
// 1, 2 외 다른 것을 입력
} else {
System.out.println("올바른 번호를 입력하세요");
continue;
}
먼저 입력값에 따라 `if-else`로 분기 처리했다.
✔️ 1을 입력하면 장바구니에 추가된다. 이때 `containsKey()` 메서드로 이미 담긴 상품인지 확인한다.
✔️ 이미 있으면 → `get()`메서드(조회)로 현재 수량을 꺼내서 +1 후 다시 `put()`메서드(추가)
✔️ 같은 상품이 없으면 수량 1로 `put()`
✔️ 2를 입력하면 취소 후 `continue`로 다시 메인으로 돌아간다.
✔️ 그 외 입력은 안내 메시지 출력 후 `continue`로 다시 돌아간다.
장바구니 추가 성공⎝⍢⎠

느낀 점
몰랐던 클래스나 메서드를 배우고 그걸 활용해 완성해 가는 과정이 너무 재밌는 것 같다.
처음에는 객체 생성도 어려웠는데 정말 많이 성장한 것 같다 ㅎㅎ 앞으로도 화이팅! 🔥🔥🔥