JAVA/이론

36. [ JAVA ] 배열 : HashMap

천재단미 2024. 12. 17. 17:26
728x90
반응형

 

1. HashMap

 

 

HashMap은 Java에서 데이터를 키-값(key-value) 쌍으로 저장하는 데이터 구조입니다. java.util.HashMap 클래스는 Map 인터페이스를 구현하며, 내부적으로 **해시 테이블(Hash Table)**을 사용하여 데이터를 저장합니다. 키는 고유해야 하며, 값은 중복될 수 있습니다.


        // 학생 이름과 점수를 저장하려 한다.
        // 이순신,95
        // 홍길동,80
        // 김나나,70
        //즉, 이름과 점수의 쌍(pair)으로 저장하고 싶다.
        // 이 쌍(pair)KeyValue라고 합니다.

 

 

   // 변수 이름 하나로, 여러 데이터를 저장할 수 있습니다.



   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();

    }
}

728x90
반응형
home top bottom
}