기록하는 습관을 들이자

Java HashMap 클래스와 메소드 본문

알고리즘/Java

Java HashMap 클래스와 메소드

myeongmy 2020. 4. 6. 00:20
반응형

이번에는 구현 시 많이 쓰이게 되는 Map 클래스에 대해 정리해보고자 한다.

 

Map은 기본적으로 <key, value> 쌍으로 매핑해 주는 것으로써 key는 중복될 수 없고, value는 중복 가능하다는 특징을 가지고 있다.

 

자바의 Map 인터페이스와 클래스 구조는 다음과 같다.

 

Map 인터페이스와 각종 클래스 상속 구조

 

 

1. HashMap 클래스의 기본 메소드

 

HashMap 메소드 설명
.put(key, value) (key, value) 쌍의 새로운 데이터 추가
.get(key) key값에 해당하는 value값 반환
.remove(key) key값에 해당하는 데이터 삭제
.keySet() key값들 집합 반환
.values() value값들 집합 반환
.size() map 사이즈 반환
.isEmpty() 비어있는지 여부 반환(boolean)

 

★ 중요 메소드 - .getOrDefault(key, default 반환 값) ★ 

 

.getOrDefault() 메소드는 유용하게 쓰이니 추가적으로 기억해두자!

 

해당 메소드는 key값에 해당하는 value 값이 존재하면 해당 value 값을 반환해주고 key 값에 해당하는 데이터가 없다면 default 반환 값을 반환한다.

 

해시를 통해 특정 key 값에 대한 value 값을 계속 업데이트 해줄 때 사용된다!!

 

 

2. Key나 Value의 제너릭 타입으로 LinkedList가 쓰이는 경우

 

HashMap의 제너릭 타입으로 <String, LinkedList<String>>과 같이 리스트가 올 수 있다. value 값에 리스트가 오게 되면 데이터를 어떻게 추가하는지 살펴보자.

 

[ 새로운 데이터 추가 ]

public void putToMap(String name) {
    String firstLetter = name.substring(0, 1);

    List<String> names = testMap.get(firstLetter);
    if (names == null) {
        names = new LinkedList<String> ();
        testMap.put(firstLetter, names);
    }

    names.add(name);
}

HashMap의 .get(key) 메소드를 이용해 LinkedList를 불러온 뒤 이전에 들어온 적이 없었다면(null이라면) 리스트 객체를 생성해주고 put()해준다.

 

 

3. keySet() 기준 정렬과 values() 기준 정렬 방법

 

HashMap에 저장된 데이터를 일정한 순서를 가지고 가져와야하는 경우에는 정렬을 사용한다.

 

[ keySet() 기준 오름차순 정렬 ]

 

아래는 key 값의 오름차순대로 데이터를 반환해오는 방법이다.

 

먼저, keySet을 List 형태로 변환한 뒤

List<Integer> keySetList = new ArrayList<>(hm.keySet());

Collections.sort() 메소드를 활용하여 정렬해준다.

Collections.sort(keySetList, new Comparator<Integer>(){
	public int compare(Integer a, Integer b){
    	if(a < b)
        	return -1;
        else
        	return 1;
    }
});

for(Integer a : keySetList){
	System.out.println(a+" "+hm.get(a));
}

 

[ values() 기준 오름차순 정렬 ]

 

위 방법과 같이 먼저 .keySet()을 List로 변환해준다.

List<Integer> keySetList = new ArrayList<>(hm.keySet());

 

그런 다음 Collections.sort() 메소드를 이용해 정렬해주되, 정렬의 기준이 value 데이터가 된다.

 

Collections.sort(keySetList, new Comparator<Integer>(){
	public int compare(Integer a, Integer b){
    	if(hm.get(a) < hm.get(b))
        	return -1;
        else
        	return 1;
    }
});


for(Integer a : keySetList){
	System.out.println(a+" "+hm.get(a));
}

 

정리 끝!

 

 

반응형
Comments