본문 바로가기
개발/Java

[Java] HashMap

by 두리두리안 2021. 5. 22.

HashMap은 Map 인터페이스를 구현한 대표적인 Map 컬렉션이다. HashMap의 키로 사용할 객체는 hashCode()와 equals()메소드를 재정의해서 동등객체가 될 조건을 정해야 한다. 

 

hashCode()의 리턴값이 같아야 하고, equals()메소드가 true를 리턴해야 한다. 

 

[이름을 키로 점수를 값으로 저장하기]  - 이름을 key, 점수를 value로 저장

 

package HashMap;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class HashMapTest01 {
    public static void main(String[] args){
        //Map 컬랙션 생성
        Map<String, Integer> map = new HashMap<String, Integer>();
        
        //객체 생성
        map.put("신용권", 85);
        map.put("홍길동", 90);
        map.put("동장군", 80);
        map.put("홍길동", 95); // 홍길동 마지막 키가 같기 때문 제일 마지막에 저장된 값으로 대치

        System.out.println("총 Entry 수 : " + map.size()); // 저장된 총 Entry 수 얻기

        //객체 찾기
        System.out.println("\t홍길동 : " +map.get("홍길동"));
        System.out.println();

        //객체를 하나씩 처리
        Set<String> keyset = map.keySet(); // 키 값얻기
        Iterator<String> keyIterator = keyset.iterator(); //반복해서 키를 얻고 값을 Map에서 얻어냄
        while (keyIterator.hasNext()){
            String key = keyIterator.next();
            Integer value = map.get(key);
            System.out.println("\t" + key + ":" +value);
        }
        System.out.println();

        //객체 삭제
        map.remove("홍길동");
        System.out.println("총 Entry 수 : " +map.size());
        
        //객체를 하나씩 처리
        Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
        Iterator<Map.Entry<String, Integer>> entryIterator = entrySet.iterator();

        while(entryIterator.hasNext()){
            Map.Entry<String, Integer> entry = entryIterator.next();
            String key = entry.getKey();
            Integer value = entry.getValue();
            System.out.println("\t" +key + " : " +value);
        }
        System.out.println();

        //객체 전체 삭제
        map.clear();
        System.out.println("총 Entry 수: "+map.size());

    }
}


사용자 정의 객체인 Student를 키로하고 점수를 저정하는 HashMap 사용방법을 보여준다. 

학번과 이름이 동일한 Student를 동등 키로 간주하기 위해 Student 클래스에는 hashCode()와 equals()메소드가 재정의 

 

instanceof는 객체타입을 확인하는데 사용한다. 속성은 연산자이고 형변환이 가능한 지 해당 여부를 true 또는 false로 가르쳐준다. 객체 타입이라 하니 어려운 개념 같은데, 주로 부모 객체인지 자식 객체인지 확인하는데 쓴다고 생각하면 된다.

 

 

package HashMap;

class Student {
    public int sno;
    public String name;

    public Student(int sno, String name){
        this.sno = sno;
        this.name = name;
    }

    public boolean equals(Object obj){ // 학번과 이름이 동일한 경우 true를 리턴
        if(obj instanceof Student) {
            Student student = (Student) obj;
            return (sno == student.sno) && (name == student.name);
        }else {
            return false;
        }
    }

    public int hashCode(){ // 학번과 이름이 같다면 동일한 값을 리턴
        return sno + name.hashCode();
    }
}

 

 

package HashMap;

import java.util.HashMap;
import java.util.Map;

public class HashMapExample2 {
    public static  void  main(String[] args){
        Map<Student ,Integer> map = new HashMap<>();
        //질문

        map.put(new Student(1, "최준"), 95);
        map.put(new Student(2, "김준"), 91);

        System.out.println("책에서 확인한 부분");
        System.out.println("*********************");
        System.out.println("총 Entry 수 : " +map.size());
        System.out.println("*********************");
        System.out.println(" ** 추가 부분 ** ");
        System.out.println("*********************");

        for(Student s : map.keySet()){
            System.out.println("Key값 : "+s.name +" > "+ s.sno);
        }

        for(Map.Entry<Student, Integer> v : map.entrySet()){
            System.out.println("value값 : " + v.getValue());

        }
    }
}

 

'개발 > Java' 카테고리의 다른 글

[Map] HashMap 이론 및 코드  (0) 2021.05.26
[Java] List 컬렉션  (0) 2021.05.22
[Java] Method(4) - 외부 호출  (0) 2021.05.19
[Java] Method(3) - 메소드 호출  (0) 2021.05.19
[Java] Method(2) - return문  (0) 2021.05.19