1. HashMap
HashMap은 Java에서 데이터를 키-값(key-value) 쌍으로 저장하는 데이터 구조입니다. java.util.HashMap 클래스는 Map 인터페이스를 구현하며, 내부적으로 **해시 테이블(Hash Table)**을 사용하여 데이터를 저장합니다. 키는 고유해야 하며, 값은 중복될 수 있습니다.
// 학생 이름과 점수를 저장하려 한다.
// 이순신,95
// 홍길동,80
// 김나나,70
//즉, 이름과 점수의 쌍(pair)으로 저장하고 싶다.
// 이 쌍(pair)를 Key와 Value라고 합니다.
// 변수 이름 하나로, 여러 데이터를 저장할 수 있습니다.
HashMap <String, Integer> scoreMap = new HashMap<>(); |
// 데이터 추가 : CRUD의 C
scoreMap.put("이순신", 95); scoreMap.put("홍길동", 80); scoreMap.put("김나나", 70); |
// 데이터 가져오기, 데이터 엑서스 CRUD의 R
// HashMap은,Key로 한 번에 데이터 엑서스가 가능합니다.
// 김나나 점수는?
System.out.println(scoreMap.get("김나나")); |
// 김나나의 점수를 88점으로 변경 : CRUD의 U
scoreMap.put("김나나", 88); System.out.println( scoreMap.get("김나나") ); |
// 홍길동 데이터를 삭제 :CRUD의 D
// 데이터 삭제도 Key로 한다.
scoreMap.remove("홍길동"); |
//HashMap의 저장되어있는 전체 데이터를 가져와 출력 : entryset()
for ( Map.Entry<String,Integer> scorePair : scoreMap.entrySet() ){ System.out.println( scorePair.getKey() + " : " + scorePair.getValue() ); } |
// ㄱㄴ 순서 이기 때문에 등록순서인 이순신이 아닌 김나나가 먼저 출력됩니다. (출력순서 무작위)
// 데이터 모두 삭제: clear()
scoreMap.clear(); |
// 진짜 비어있는지 확인: isEmpty()
System.out.println( scoreMap.isEmpty() ); |
2. 예시
문제1)
상품 관리 시스템을 예로 들어보겠습니다.
import java.util.HashMap;
import java.util.Map;
class Product {
private String id;
private String name;
private double price;
// TODO: Product 클래스의 디폴트 생성자를 만드세요.
package entety; public class Product { private String id; private String name; private double price; // TODO: Product 클래스의 디폴트 생성자를 만드세요. public Product() { } |
// TODO: Product 클래스의 다음 생성자를 구현하세요.
// 힌트: id, name, price를 매개변수로 받아 초기화합니다.
// TODO: Product 클래스의 다음 생성자를 구현하세요. // 힌트: id, name, price를 매개변수로 받아 초기화합니다. public Product(String id, String name, double price) { this.id = id; this.name = name; this.price = price; } |
// TODO: getter 메서드들을 구현하세요.
// TODO: getter 메소드들을 구현하세요. public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name= name; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } |
// TODO: print 함수
// 힌트: "ID: [id], 상품명: [name], 가격: [price] 원" 형식출력.
}
// TODO: print 함수 // 힌트: "ID: [id], 상품명: [name], 가격: [price]원" 형식출력. public void print() { System.out.println("ID : " + id + ", 상품명 : " + name + ", 가격 : " + price + "원"); } } |
package entety; public class Product { private String id; private String name; private double price; // TODO: Product 클래스의 디폴트 생성자를 만드세요. public Product() { } // TODO: Product 클래스의 다음 생성자를 구현하세요. // 힌트: id, name, price를 매개변수로 받아 초기화합니다. public Product(String id, String name, double price) { this.id = id; this.name = name; this.price = price; } // TODO: getter 메소드들을 구현하세요. public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name= name; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } // TODO: print 함수 // 힌트: "ID: [id], 상품명: [name], 가격: [price]원" 형식출력. public void print() { System.out.println("ID : " + id + ", 상품명 : " + name + ", 가격 : " + price + "원"); } } |
class OnlineStore {
private HashMap <String, Product> products;
public OnlineStore() {
// TODO: products HashMap을 초기화하세요.
}
package entety; import java.util.HashMap; import java.util.Map; public class OnlineStore { private HashMap<String, Product> products; public OnlineStore() { // TODO: products HashMap을 초기화하세요. products = new HashMap<>(); } |
public void addProduct(Product product) {
// TODO: 상품을 HashMap에 추가하세요. 상품 ID를 키로 사용합니다.
// 힌트: put 메서드를 사용하세요.
}
public void addProduct(Product product) { // TODO: 상품을 HashMap에 추가하세요. 상품 ID를 키로 사용합니다. // 힌트: put 메소드를 사용하세요. products.put(product.getId(),product); // getId 를 가져오기 위하여 Product 클래스의 getter 메소드들을 구현합니다. } |
public Product findProduct(String id) {
// TODO: 주어진 ID로 상품을 찾아 반환하세요.
// 힌트: get 메소드를 사용하세요.
return null; // 이 줄은 수정하세요.
}
public Product findProduct(String id) { // TODO: 주어진 ID로 상품을 찾아 반환하세요. // 힌트: get 메소드를 사용하세요. Product product = products.get(id); if(product == null){ return null; }else { return product; } } |
public void removeProduct(String id) {
// TODO: 주어진 ID의 상품을 HashMap에서 제거하세요.
// 힌트: remove 메소드를 사용하세요.
}
public void removeProduct(String id) { // TODO: 주어진 ID의 상품을 HashMap에서 제거하세요. // 힌트: remove 메소드를 사용하세요. products.remove(id); } |
public void displayAllProducts() {
// TODO: 모든 상품의 정보를 출력하세요.
// 힌트: entrySet()을 사용하여 HashMap을 순회하세요.
public void displayAllProducts() { // TODO: 모든 상품의 정보를 출력하세요. // 힌트: entrySet()을 사용하여 HashMap을 순회하세요. for (Map.Entry<String, Product> productPair : products.entrySet()){ productPair.getValue().print(); } } |
package entety; import java.util.HashMap; import java.util.Map; public class OnlineStore { private HashMap<String, Product> products; public OnlineStore() { // TODO: products HashMap을 초기화하세요. products = new HashMap<>(); } public void addProduct(Product product) { // TODO: 상품을 HashMap에 추가하세요. 상품 ID를 키로 사용합니다. // 힌트: put 메소드를 사용하세요. products.put(product.getId(),product); } public Product findProduct(String id) { // TODO: 주어진 ID로 상품을 찾아 반환하세요. // 힌트: get 메소드를 사용하세요. Product product = products.get(id); if(product == null){ return null; }else { return product; } } public void removeProduct(String id) { // TODO: 주어진 ID의 상품을 HashMap에서 제거하세요. // 힌트: remove 메소드를 사용하세요. products.remove(id); } public void displayAllProducts() { // TODO: 모든 상품의 정보를 출력하세요. // 힌트: entrySet()을 사용하여 HashMap을 순회하세요. for (Map.Entry<String, Product> productPair : products.entrySet()){ productPair.getValue().print(); } } } |
public class Main {
public static void main(String [] args) {
OnlineStore store = new OnlineStore();
// TODO: 최소 3개의 상품을 생성하고 store에 추가하세요.
// Product product1 = new Product("P001", "스마트폰", 899000.0);
// Product product2 = new Product("P002", "노트북", 1299000.0);
// Product product3 = new Product("P003", "무선이어폰", 199000.0);
import entety.OnlineStore; import entety.Product; public class Main { public static void main(String[] args) { OnlineStore store = new OnlineStore(); // TODO: 최소 3개의 상품을 생성하고 store에 추가하세요. // Product product1 = new Product("P001", "스마트폰", 899000.0); // Product product2 = new Product("P002", "노트북", 1299000.0); // Product product3 = new Product("P003", "무선이어폰", 199000.0); Product product1 = new Product("P001", "스마트폰", 899000.0); Product product2 = new Product("P002", "노트북", 1299000.0); Product product3 = new Product("P003", "무선이어폰", 199000.0); store.addProduct(product1); store.addProduct(product2); store.addProduct(product3); |
// TODO: 모든 상품 정보를 출력하세요.
// TODO: 모든 상품 정보를 출력하세요. store.displayAllProducts(); |
// TODO: ID로 한 개의 상품을 검색하고 그 정보를 출력하세요.
// TODO: ID로 한 개의 상품을 검색하고 그 정보를 출력하세요. store.findProduct("P001").print(); |
// TODO: 한 개의 상품을 삭제하세요.
// TODO: 삭제 후 모든 상품 정보를 다시 출력하세요.
// TODO: 한 개의 상품을 삭제하세요. store.removeProduct("P002"); // TODO: 삭제 후 모든 상품 정보를 다시 출력하세요. store.displayAllProducts(); |
import entety.OnlineStore; import entety.Product; public class Main { public static void main(String[] args) { OnlineStore store = new OnlineStore(); // TODO: 최소 3개의 상품을 생성하고 store에 추가하세요. // Product product1 = new Product("P001", "스마트폰", 899000.0); // Product product2 = new Product("P002", "노트북", 1299000.0); // Product product3 = new Product("P003", "무선이어폰", 199000.0); Product product1 = new Product("P001", "스마트폰", 899000.0); Product product2 = new Product("P002", "노트북", 1299000.0); Product product3 = new Product("P003", "무선이어폰", 199000.0); store.addProduct(product1); store.addProduct(product2); store.addProduct(product3); // TODO: 모든 상품 정보를 출력하세요. store.displayAllProducts(); // TODO: ID로 한 개의 상품을 검색하고 그 정보를 출력하세요. store.findProduct("P001").print(); // TODO: 한 개의 상품을 삭제하세요. store.removeProduct("P002"); // TODO: 삭제 후 모든 상품 정보를 다시 출력하세요. store.displayAllProducts(); } } |
'JAVA > 이론' 카테고리의 다른 글
60. [ JAVA ] SpringBoot JPA @Entity 사용법 (0) | 2025.01.12 |
---|---|
54. [ JAVA ] Spring Boot에서 발생하는 예외처리(@Exception Hander) (0) | 2025.01.11 |
35. [ JAVA ] 배열 : ArrayList (0) | 2024.12.17 |
34. [ JAVA ] 문자열 생성하는 방법 (1) | 2024.12.17 |
33. [ JAVA ] 상속 : interface (0) | 2024.12.16 |