LinkedHashMap이란?
LinkedHashMap은 Map 인터페이스를 해시 테이블(hash table)과 연결 리스트(linked list)로 구현한 클래스입니다. 일반 HashMap과 달리 요소가 삽입된 순서(insertion order)를 그대로 유지하며, 따라서 반복(iteration) 시 예측 가능한 순서로 데이터에 접근할 수 있다는 것이 가장 큰 특징입니다.
또한 하나의 키(key)에는 하나의 값(value)만 저장되므로, 동일한 키로 다시 값을 넣으면 기존 값이 새로운 값으로 덮어써진다는 점도 기억해야 합니다.
LinkedHashMap 예제
import java.util.*;
public class Demo {
public static void main(String args[]){
LinkedHashMap<Integer, String> my_set;
my_set = new LinkedHashMap<Integer, String>();
my_set.put(67, "Joe");
my_set.put(90, "Dev");
my_set.put(null, "Nate");
my_set.put(68, "Sara");
my_set.put(69, "Amal");
my_set.put(null, "Jake");
my_set.put(69, "Ral");
my_set.entrySet().stream().forEach((m) ->{
System.out.println(m.getKey() + " " + m.getValue());
});
}
}실행 결과
67 Joe 90 Dev null Jake 68 Sara 69 Ral
코드 동작 방식
Demo 클래스의 main 함수에서 LinkedHashMap 인스턴스가 생성됩니다. 이후 put() 메서드를 사용해 정수(Integer)와 문자열(String) 형태의 키-값 쌍을 맵에 추가합니다.
출력 결과를 보면 데이터가 입력된 순서대로 그대로 출력되는 것을 확인할 수 있습니다. 주목할 점은 두 가지입니다.
- 키
null에는 처음에 "Nate"가 저장되었지만, 나중에 "Jake"로 다시 저장되면서 값이 덮어써졌습니다. - 키
69역시 처음에 "Amal"이 저장되었지만, 이후 "Ral"로 대체되었습니다.
마지막으로 forEach 스트림을 통해 맵의 모든 엔트리를 순회하며 키와 값을 콘솔에 출력합니다.
LinkedHashSet이란?
LinkedHashSet은 Set 인터페이스를 해시 테이블과 연결 리스트로 구현한 클래스입니다. LinkedHashMap과 마찬가지로 삽입 순서를 유지하는 예측 가능한 반복 순서를 제공하며, Set의 특성상 중복된 요소는 허용하지 않습니다.
LinkedHashSet 예제
import java.util.*;
public class Demo {
public static void main(String args[]){
LinkedHashSet<String> my_set;
my_set = new LinkedHashSet<String>();
my_set.add("Joe");
my_set.add("Dev");
my_set.add("Nate");
my_set.add("Sara");
my_set.add("Amal");
my_set.add("Jake");
my_set.add("Ral");
Iterator<String> my_itr = my_set.iterator();
while (my_itr.hasNext()){
System.out.println(my_itr.next());
}
}
}실행 결과
Joe Dev Nate Sara Amal Jake Ral
코드 동작 방식
Demo 클래스의 main 함수 안에서 LinkedHashSet 인스턴스가 생성됩니다. add() 메서드를 사용해 문자열 요소들을 하나씩 추가한 후, iterator() 메서드로 반복자(Iterator)를 얻습니다.
hasNext() 메서드로 다음 요소의 존재 여부를 확인하고, next() 메서드로 실제 요소를 가져오는 방식으로 집합 전체를 순회하며 모든 요소를 콘솔에 출력합니다.
정리
- LinkedHashMap: Map 구현체로, 키-값 쌍을 저장하며 삽입 순서를 유지합니다. 동일한 키에 값을 다시 넣으면 기존 값이 대체됩니다.
- LinkedHashSet: Set 구현체로, 중복 없는 고유한 요소만 저장하며 삽입 순서를 유지합니다.
- 두 클래스 모두 해시 테이블과 연결 리스트를 결합해 빠른 검색 성능과 안정적인 순서 보장을 동시에 제공합니다.