Java 해시맵과 투 포인터를 활용한 네 가지 문제 풀이

1. 454. 네 수의 합 II (4Sum II) 이 문제는 네 개의 배열에서 각각 하나씩 선택하여 합이 0이 되는 조합의 개수를 찾는 문제입니다. 해시맵을 사용하면 시간 복잡도를 O(n²)으로 줄일 수 있습니다. 먼저 첫 번째와 두 번째 배열의 모든 쌍의 합과 그 등장 횟수를 해시맵에 저장합니다. 그 다음 세 번째와 네 번째 배열의 모든 쌍의 합에 대해, 0에서 해당 합을 뺀 값이 ...

6월 25일 16:04에 게시됨

Java HashMap 핵심 소스 코드 직접 구현하기

Java HashMap 핵심 소스 코드 직접 구현하기 이전 글에서는 LinkedList의 핵심 소스 코드를 직접 구현해 보았습니다. 이번에는 Java HashMap의 핵심 소스 코드를 직접 구현해 보겠습니다. HashMap의 원리를 먼저 살펴보겠습니다. HashMap은 이름에서 알 수 있듯이 hash와 map의 조합입니다. map은 매핑이라는 의미이고, HashMap은 hash를 활용하여 키-값 쌍을 저장하는 ...

6월 22일 19:56에 게시됨

HashMap의 부적절한 사용으로 인한 CPU 100% 문제 분석

이전 프로젝트에서 비슷한 문제가 발생했었는데, 그때는 CurrentHashMap을 사용했습니다. 이 글은 그러한 문제를 재조명하고, 개발자들에게 경고하기 위한 것입니다. HashMap의 잘못된 사용으로 인해 최근에도 여러 사례가 발생했습니다. 이에 대한 자세한 내용은 다음과 같습니다. 다음 코드는 HashMap의 쓰레드 안전하지 않은 사용으로 인한 데드락(실제로는 데드리프) ...

6월 13일 21:39에 게시됨

Java 주요 컬렉션의 알고리즘 복잡도 분석

1. 알고리즘 복잡도 기초 알고리즘 복잡도는 시간 복잡도와 공간 복잡도로 구성됩니다. 시간 복잡도는 데이터 규모가 증가함에 따라 알고리즘 실행 시간이 어떻게 변하는지 측정하며, 일반적으로 빅오 표기법(Big O notation)을 사용합니다. 공간 복잡도는 알고리즘 실행 중 필요한 추가 메모리 공간과 데이터 규모 간의 관계를 나타냅니다. 1.1 시간 복잡도 분석의 중요 ...

6월 9일 00:29에 게시됨

Java에서의 Map 데이터 구조

Java 프로그래밍 언어에서 기본적인 데이터 구조는 배열과 참조(가상 포인터)로 구성됩니다. 모든 데이터 구조는 이 두 가지 기본 요소를 통해 구현됩니다. HashMap은 배열과 연결 리스트의 결합체로, 데이터 구조에서 일반적으로 "연결된 해시"라고 불립니다. 배열이란? Java는 동일한 타입의 요소를 저장하는 고정 크기의 연속형 컬렉션을 제공합니다. 이는 배 ...

6월 7일 18:01에 게시됨

HashMap 내부 구조와 작동 원리

데이터 구조 1.7 버전 배열과 연결 리스트의 조합으로, 키-값 쌍은 Entry 내부 클래스 배열에 저장됩니다. 키로부터 계산된 해시값이 배열의 인덱스가 됩니다. 이를 버킷 배열이라고 부르며, 해시 충돌이 발생할 경우 Entry 클래스의 내부 멤버 변수 Entry<k,v> next;를 통해 연결 리스트를 형성합니다. 해시값이 동일한 요소들은 머리 삽입법(head insertion)을 ...

6월 3일 17:20에 게시됨