_yoonie
개발일기
_yoonie
전체 방문자
오늘
어제
  • 분류 전체보기 (70)
    • 개발일기 (2)
    • DB (8)
      • MySQL (2)
      • PostgreSQL (6)
    • WEB (30)
      • JAVASCRIPT (7)
      • Vue.js (2)
      • MyBatis (3)
      • PHP (7)
      • HTML_CSS (5)
      • etc. (3)
    • Java (9)
    • Android (5)
    • Kotlin (0)
    • C# (3)
    • Python (2)
    • 개발 툴 (5)
    • 기획 (1)
    • 자료실 (2)
    • React (0)

인기 글

태그

  • 기획
  • VirtualBox
  • Java
  • CSS
  • androidstudio
  • java programming
  • c#
  • PostgreSQL
  • 안드로이드스튜디오
  • ubuntu

최근 댓글

최근 글

티스토리

160x600
hELLO · Designed By 정상우.
_yoonie

개발일기

[JAVA] HashMap, LinkedHashMap - value로 key찾기
Java

[JAVA] HashMap, LinkedHashMap - value로 key찾기

2023. 8. 9. 10:41

HashMap, LinkedHashMap에서 value로 key를 찾을 때 사용하는 방법입니다.

1. map을 반복하면서 값 찾기

모든 엔트리를 확인해야하므로 실행 시간이 오래 걸립니다.

HashMap<String, Integer> map = new HashMap<>();
map.put("a" , 100);
map.put("b" , 200);
map.put("c" , 300);

for (Map.Entry<String, Integer> entry : map.entrySet()) {
    if(entry.getValue() == 100){
    	return entry.getKey();
    }
}

 

2. key와 value를 바꾼 map생성

첫번째 방법보다 빠르게 key를 찾을 수 있지만, 두 개의 hashmap을 유지해야한다는 단점이 있습니다.

1) 모든 key의 value가 다를 경우

HashMap<String, Integer> orgMap = new HashMap<>();
orgMap.put("key1", 10);
orgMap.put("key2", 20);
orgMap.put("key3", 30);

HashMap<Integer, String> switchMap = new HashMap<>();
for (Map.Entry<String, Integer> entry : orgMap.entrySet()) {
    switchMap.put(entry.getValue(), entry.getKey());
}

switchMap.get(10) //"key1"

2) value가 같은 key가 여러개 있는 경우

HashMap에서 동일한 키를 중복으로 저장할 수 없기 때문에 value를 리스트나 집합(Set)형태로 저장합니다.

HashMap<String, Integer> orgMap = new HashMap<>();
orgMap.put("key1", 10);
orgMap.put("key2", 20);
orgMap.put("key3", 30);
orgMap.put("key4", 30);

HashMap<Integer, List<String>> switchMap = new HashMap<>();
for (Map.Entry<String, Integer> entry : orgMap.entrySet()) {
    String key = entry.getKey();
    Integer value = entry.getValue();
	//값이 이미 존재한다면 해당 값을 가지는 리스트에 키를 추가하고, 값이 없다면 새로운 리스트 생성하여 추가
    switchMap.computeIfAbsent(value, k -> new ArrayList<>()).add(key);
}

switchMap.get(30) // [key3, key4]

Java8 이후 버전에서 Stream API사용

HashMap<String, Integer> orgMap = new HashMap<>();
orgMap.put("key1", 10);
orgMap.put("key2", 20);
orgMap.put("key3", 30);
orgMap.put("key4", 30);

// 값을 그룹화하여 리스트로 저장
Map<Integer, List<String>> groupedMap = orgMap.entrySet()
        .stream()
        .collect(Collectors.groupingBy(Map.Entry::getValue, Collectors.mapping(Map.Entry::getKey, Collectors.toList())));

// 값을 찾는 방법
List<String> returnKey = groupedMap.get(30); //[key3, key4]

 

key로 value를 찾을 때는 map.get(key) 를 사용하면 간단합니다.

기본 사용법은 아래 포스팅을 참고해주세요.

 

👉[JAVA] Java HashMap, LinkedHashMap 기본 사용법 보러가기

 

[JAVA] Java HashMap, LinkedHashMap, TreeMap

Map key와 value로 구성된 Entry객체를 저장하는 구조를 가지고 있는 자료구조 HashMap Map 인터페이스를 상속하여 Map의 성질을 그대로 가지고 있음 많은 양의 데이터를 검색하는데 뛰어난 성능을 보임

jiyoon-dev.tistory.com

 

728x90
저작자표시 (새창열림)

'Java' 카테고리의 다른 글

[Java] equals NullPointerException(NPE) 다루기  (0) 2023.08.11
[Java] LocalDate 비교  (0) 2023.08.10
[JAVA] Set과 Map의 차이  (0) 2023.07.27
[JAVA] Java HashMap, LinkedHashMap, TreeMap  (0) 2023.02.16
[JAVA] 자바 TreeMap 사용하기  (0) 2023.02.16
    _yoonie
    _yoonie
    일상이 개발인 개발자의 일상

    티스토리툴바