English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 튜토리얼에서는 예제를 통해 Java LinkedHashMap 클래스와 그操作을 배울 것입니다.
Java 컬렉션 프레임워크의 LinkedHashMap 클래스는 다음과 같은 기능을 제공합니다.Map 인터페이스의 해시 테이블과 링크드리스트 구현을 상속받았습니다.
LinkedHashMap은HashMap클래스를 생성하여 그 항목을 해시 테이블에 저장합니다. 그것은 모든 항목 간에 내부적으로 양방향 링크드리스트를 유지하여 항목을 정렬합니다.
양방향 링크드리스트를 생성하려면, 먼저 java.util.LinkedHashMap 패키지를 가져오어야 합니다. 패키지를 가져온 후, 다음과 같은 방법으로 Java에서 양방향 링크드리스트를 생성할 수 있습니다.
//LinkedHashMap의 초기 용량은8부하 요소가 0.6 LinkedHashMap<Key, Value> numbers = new LinkedHashMap<>();8, 0.6f);
위의 코드에서는 numbers라는 이름의 LinkedHashMap을 생성했습니다.
여기서
Key - 맵의 각 요소(값)과 연결된 독특한 식별자
Value - 맵의 키와 연결된 요소
주의 new LinkedHashMap<>(8,0.6) 이 부분입니다. 여기서 첫 번째 매개변수는 capacity, 두 번째 매개변수는 loadFactor입니다.
capacity - 이 양방향 링크드 리스트의 용량은8이는它可以 store의 의미입니다.8항목.
loadFactor- 이 양방향 링크드 리스트의 부하 요소는 0입니다.6이는 해시 맵이 가득 차면 항목이 이동된다는 의미입니다.60%일 때, 항목은 원래 해시 테이블의 두 배 크기인 새 해시 테이블로 이동됩니다.
기본 용량과 부하 요소
용량과 부하 요소를 정의하지 않고 양방향 링크드 리스트를 생성할 수 있습니다. 예를 들어
//기본 용량과 부하 요소를 가진 LinkedHashMap LinkedHashMap<Key, Value> numbers1 = new LinkedHashMap<>();
기본적으로
양방향 링크드 리스트의 용량은 16
부하 요소는 0이 됩니다.75
주의주의하세요: LinkedHashMap 클래스는 항목의 순서를 정의할 수도 있습니다. 예를 들어
//지정된 순서를 가진 LinkedHashMap LinkedHashMap<Key, Value> numbers2 = new LinkedHashMap<>(capacity, loadFactor, accessOrder);
여기서 accessOrder는 부울 값입니다. 기본 값은 false입니다. 이 경우, 양방향 링크드 리스트의 항목은 삽입 순서로 정렬됩니다.
하지만, accessOrder 값이 true라면 양방향 링크드 리스트의 항목은 최근 접근 순서로 정렬됩니다.
다음은 다른 맵의 모든 요소를 포함한 양방향 링크드 리스트를 생성하는 것입니다.
import java.util.LinkedHashMap; class Main { public static void main(String[] args) { //짝수를 포함한 LinkedHashMap을 생성 LinkedHashMap<String, Integer> evenNumbers = new LinkedHashMap<>(); evenNumbers.put("Two", 2); evenNumbers.put("Four", 4); System.out.println("LinkedHashSet1: " + evenNumbers); //다른 LinkedHashMap에서 LinkedHashMap을 생성 LinkedHashMap<String, Integer> numbers = new LinkedHashMap<>(evenNumbers); numbers.put("Three", 3); System.out.println("LinkedHashSet2: " + numbers); {} {}
출력 결과
LinkedHashSet1: {Two=2, Four=4{} LinkedHashSet2: {Two=2, Four=4, Three=3{}
이 LinkedHashSet 클래스는 맵에서 다양한 작업 메서드를 수행할 수 있게 합니다.
put() - 지정된 키/값 맵핑이 맵핑에 삽입됨
putAll() -지정된 맵핑의 모든 항목을 이 맵에 삽입
putIfAbsent() -map에 지정된 키가 없으면 지정된 키/값 맵핑이 map에 삽입됨
예를 들어서,
import java.util.LinkedHashMap; class Main { public static void main(String[] args) { // 짝수 값을 가진 LinkedHashMap을 생성 LinkedHashMap<String, Integer> evenNumbers = new LinkedHashMap<>(); // 사용 put() evenNumbers.put("Two", 2); evenNumbers.put("Four", 4); System.out.println("원래 LinkedHashMap: ") + evenNumbers); // 사용 putIfAbsent() evenNumbers.putIfAbsent("Six", 6); System.out.println("업데이트된 LinkedHashMap(): ") + evenNumbers); //numbers의 LinkedHashMap을 생성 LinkedHashMap<String, Integer> numbers = new LinkedHashMap<>(); numbers.put("One", 1); // 사용 putAll() numbers.putAll(evenNumbers); System.out.println("새로운 LinkedHashMap: ") + numbers); {} {}
출력 결과
원래 LinkedHashMap: {Two=2, Four=4{} 업데이트된 LinkedHashMap: {Two=2, Four=4, Six=6{} 새로운 LinkedHashMap: {One=1, Two=2, Four=4, Six=6{}
1.사용 entrySet(), keySet() 및 values()
entrySet() -맵핑의 모든 키를 반환/값 맵핑의 집합
keySet() - map의 모든 키의 집합을 반환
values() - map의 모든 값의 집합을 반환
예를 들어서,
import java.util.LinkedHashMap; class Main { public static void main(String[] args) { LinkedHashMap<String, Integer> numbers = new LinkedHashMap<>(); numbers.put("One", 1); numbers.put("Two", 2); numbers.put("Three", 3); System.out.println("LinkedHashMap: " + numbers); // 사용 entrySet() System.out.println("Key/Value 맵핑: ") + numbers.entrySet()); // 사용 keySet() System.out.println("Keys(键): ") + numbers.keySet()); // 사용 values() System.out.println("Values(值): ") + numbers.values()); {} {}
출력 결과
LinkedHashMap: {One=1, Two=2, Three=3{} Key/Value 맵: [One=1, Two=2, Three=3] Keys(키): [One, Two, Three] Values(값): [1, 2, 3]
2. get()와 getOrDefault() 사용
get() - 지정된 키와 관련된 값을 반환합니다. 키를 찾지 못하면 null을 반환합니다.
getOrDefault() - 지정된 키와 관련된 값을 반환합니다. 찾지 못하면 지정된 기본 값을 반환합니다.
예를 들어서,
import java.util.LinkedHashMap; class Main { public static void main(String[] args) { LinkedHashMap<String, Integer> numbers = new LinkedHashMap<>(); numbers.put("One", 1); numbers.put("Two", 2); numbers.put("Three", 3); System.out.println("LinkedHashMap: " + numbers); // get() 사용 int value1 = numbers.get("Three"); System.out.println("수치 반환: " + value1); // getOrDefault() 사용 int value2 = numbers.getOrDefault("Five", 5); System.out.println("수치 반환: " + value2); {} {}
출력 결과
LinkedHashMap: {One=1, Two=2, Three=3{} 수치 반환: 3 수치 반환: 5
remove(key) - 지정된 키와 관련된 항목을 반환하고 맵에서 제거합니다.
remove(key, value) - 지정된 키 key가 지정된 값 value로 매핑되었을 때만, 맵에서 항목을 제거하고布尔 값을 반환합니다.
예를 들어서,
import java.util.LinkedHashMap; class Main { public static void main(String[] args) { LinkedHashMap<String, Integer> numbers = new LinkedHashMap<>(); numbers.put("One", 1); numbers.put("Two", 2); numbers.put("Three", 3); System.out.println("LinkedHashMap: " + numbers); //단일 매개변수를 가진 삭제 메서드 int value = numbers.remove("Two"); System.out.println("삭제 값: " + value); //두 개의 매개변수를 가진 삭제 메서드 boolean result = numbers.remove("Three", 3); System.out.println("항목3삭제되었나요? " + result); System.out.println("갱신된 LinkedHashMap: " + numbers); {} {}
출력 결과
LinkedHashMap: {One=1, Two=2, Three=3{} 삭제된 값: 2 항목3삭제되었습니까? True 갱신된 LinkedHashMap: {One=1{}
메서드 | 설명 |
---|---|
clear() | map에서 모든 항목을 제거합니다 |
containsKey() | map이 지정된 키를 포함하고 있는지 확인하고 보이는 값을 반환합니다 |
containsValue() | map이 지정된 값을 포함하고 있는지 확인하고 보이는 값을 반환합니다 |
size() | map의 크기를 반환합니다 |
isEmpty() | map이 비어 있는지 확인하고 보이는 값을 반환합니다 |
LinkedHashMap과 HashMap은 모두 Map 인터페이스를 구현합니다. 그러나, 그들 간에 차이가 있습니다.
LinkedHashMap은 내부에서 양방향 링크드 리스트를 유지합니다. 따라서, 그 요소의 삽입 순서를 유지합니다.
LinkedHashMap 클래스는 HashMap보다 더 많은 저장 공간이 필요합니다. 이는 LinkedHashMap이 내부에서 링크드 리스트를 유지하기 때문입니다.
LinkedHashMap의 성능이 HashMap보다 느릅니다.