기술 인터뷰에는 컬렉션, 특히 HashMap에 대한 이해도를 테스트하는 질문이 자주 등장합니다. 일반적인 문제 중 하나는 목록 내 요소의 발생 횟수를 계산하는 것입니다. 이 질문은 면접관이 데이터 집계를 효율적으로 처리하고 NullPointerException과 같은 함정을 피하는 능력을 평가하는 데 도움이 됩니다.
HashMaps를 처음 사용하는 경우 이 게시물을 시작하기 전에 HashMap의 기본 깨기: Java 개발자를 위한 핵심 개념에서 기본 지식을 확인하는 것이 좋습니다.
이 게시물에서 다룰 내용은 다음과 같습니다.
정수 목록이 제공되며, 귀하의 임무는 목록에서 해당 숫자의 발생 횟수와 함께 각 고유 숫자를 반환하는 것입니다. HashMap 데이터 구조에 대한 이해도와 이를 효율적으로 구현하는 능력을 테스트하는 대표적인 문제입니다.
예는 다음과 같습니다.
[1, 2, 3, 5, 2, 1]
{1=2, 2=2, 3=1, 5=1}
입력 목록이 null이거나 비어 있는 경우, 결과는 빈 HashMap을 반환해야 합니다.
이 솔루션에서는 HashMap에 숫자가 이미 키로 포함되어 있는지 수동으로 확인합니다. 그렇다면 값을 증가시킵니다. 그렇지 않은 경우 값이 1인 키를 삽입합니다.
import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; public class CountNumbers { private HashMapgetCount(List list) { // Initialize HashMap to store number counts HashMap map = new HashMap(); // To avoid NullPointerException in case of a null list if (list != null) { // Iterate through each number in the list for (int num : list) { // If first occurrence, add number with count 1 if (!map.containsKey(num)) { map.put(num, 1); } else { // If the number already exists, increment its count by 1 map.put(num, map.get(num) 1); } } } return map; } public static void main(String[] args) { // Using ArrayList Parameterized Constructor with Collection as argument List numbers = new ArrayList(Arrays.asList(1, 2, 3, 5, 2, 1)); CountNumbers nums = new CountNumbers(); System.out.println(nums.getCount(null)); // Result -> {} System.out.println(nums.getCount(numbers)); // Result -> {1=2, 2=2, 3=1, 5=1} } }
시간 복잡도:
공간 복잡도: O(n) – 최악의 경우 모든 숫자는 고유하며 HashMap에 저장됩니다.
Java HashMap 클래스는 getOrDefault() 메소드를 사용하여 이 문제를 처리할 수 있는 더 깔끔하고 간결한 방법을 제공합니다. 맵에서 키를 찾을 수 없는 경우 기본값을 반환하여 if-else 논리가 필요하지 않습니다.
V getOrDefault(Object key, V defaultValue)
매개변수:
반환: 지정된 키가 매핑되는 값 또는 맵에 키에 대한 매핑이 포함되어 있지 않은 경우 defaultValue입니다.
자세한 내용은 HashMap 공식 Javadoc을 확인하세요.
import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; public class CountNumbers { private HashMapgetCount(List list) { // Initialize HashMap to store number counts HashMap map = new HashMap(); // To avoid NullPointerException in case of a null list if (list != null) { // Iterate through each number in the list for (int num : list) { // Cleaner solution using getOrDefault() map.put(num, map.getOrDefault(num, 0) 1); } } return map; } public static void main(String[] args) { // Using ArrayList Parameterized Constructor with Collection as argument List numbers = new ArrayList(Arrays.asList(1, 2, 3, 5, 2, 1)); CountNumbers nums = new CountNumbers(); System.out.println(nums.getCount(null)); // Result -> {} System.out.println(nums.getCount(numbers)); // Result -> {1=2, 2=2, 3=1, 5=1} } }
측면 | 기존 접근 방식 | getOrDefault() 사용 |
---|---|---|
코드 가독성 | if-else 논리로 약간 장황함 | 더 깔끔하고 간결해졌습니다 |
성능 | 같음(O(n)) | 같음(O(n)) |
사용 사례 | 모든 Java 버전에서 작동 | Java 8 이상이 필요합니다. |
두 솔루션 모두 동일한 결과를 산출하지만 getOrDefault()를 사용하면 코드가 더 간결해지고 읽기 쉬워집니다. 이 질문은 HashMaps, 반복 및 null 값 처리에 대한 이해도를 평가하기 때문에 인터뷰에서 자주 선호되는 질문입니다. 또한 빈도 계산 및 데이터 집계
와 관련된 문제와도 밀접하게 관련되어 있습니다.이 게시물이 도움이 되었다면 Collections Framework Essentials 시리즈의 다른 게시물도 확인해 보세요!
자바 기초
어레이 인터뷰 필수사항
Java 메모리 필수사항
즐거운 코딩하세요!
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3