java map interface tutorial with implementation examples
이 포괄적 인 Java 맵 자습서에서는 맵을 생성, 초기화 및 반복하는 방법을 다룹니다. 또한지도 방법 및 구현 예에 대해서도 배웁니다.
지도 인터페이스의 기본 사항,지도 인터페이스에서 지원하는 방법 및지도 인터페이스와 관련된 기타 특정 용어를 알게됩니다.
Java의 Maps 컬렉션은 키를 값에 매핑하는 컬렉션입니다. 키와 값으로 구성된 컬렉션입니다. 맵의 각 항목은 해당 값이있는 키로 구성됩니다. 키는 맵에서 고유합니다. 맵은 일반적으로 키 값을 기반으로 컬렉션을 수정해야 할 때 사용할 수 있습니다.
학습 내용 :
자바지도
Java의 맵은 java.util.map 인터페이스의 일부입니다. 지도 인터페이스는 컬렉션 인터페이스의 일부가 아니므로지도가 다른 컬렉션과 다른 이유입니다.
지도 인터페이스의 일반적인 계층은 다음과 같습니다.
위와 같이 map 인터페이스와 sortedMap 인터페이스를 구현하기위한 두 개의 인터페이스가 있습니다. 세 가지 클래스 즉, HashMap, TreeMap 및 LinkedHashMap이 있습니다.
이러한지도 유형은 아래에 설명되어 있습니다.
수업 | 기술 | |
---|---|---|
없애다 | V 제거 (개체 키) | 주어진 키에 대한지도 항목 삭제 |
LinkedHashMap | HashMap 클래스에서 확장합니다. 이지도는 게재 신청서를 유지합니다. | |
HashMap | 지도 인터페이스를 구현합니다. HashMap은 순서를 유지하지 않습니다. | |
TreeMap | map 및 sortedMap 인터페이스를 모두 구현합니다. TreeMap은 오름차순을 유지합니다. |
지도에 대해 기억해야 할 사항.
- 맵에서 각 키는 최대 하나의 값에 매핑 할 수 있습니다. 또한 맵에 중복 키가있을 수 없습니다.
- HashMap 및 LinkedHashMap과 같은 맵 구현은 널 키 및 널 값을 허용합니다. 그러나 TreeMap은이를 허용하지 않습니다.
- 지도는있는 그대로 횡단 할 수 없습니다. 따라서 순회를 위해서는 keyset () 또는 entrySet () 메서드를 사용하여 설정으로 변환해야합니다.
자바에서지도 만들기
Java로 맵을 생성하려면 먼저 프로그램에 인터페이스를 포함해야합니다. 프로그램에서 다음 명령문 중 하나를 사용하여 맵 기능을 가져올 수 있습니다.
import java.util.*; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.TreeMap;
지도가 인터페이스이기 때문에 구체적인 구현을 인스턴스화해야합니다.
다음 문은 Java로 맵을 생성합니다.
Map hash_map = new HashMap(); Map tree_map = new TreeMap();
위의 명령문은 기본 사양으로 맵을 생성합니다.
키와 값 모두에 대한 유형을 지정하는 일반 맵을 만들 수도 있습니다.
Map myMap = new HashMap();
위의 정의에는 문자열 유형의 키와 값으로 개체가 있습니다.
자바에서지도 초기화
다음 방법을 사용하여 초기화 할 수 있습니다.
# 1) 컬렉션 사용
Java Collections 클래스에는 맵을 포함한 컬렉션을 초기화하는 데 사용할 수있는 팩토리 메서드가 있습니다.
지도 초기화에 사용되는 몇 가지 방법은 다음과 같습니다.
(1) Collections.EmptyMap ()
Collections.EmptyMap ()은 비어있는 직렬화 가능하고 변경 불가능한 맵을 리턴합니다. 예를 들면 다음 코드 줄,
Map myMap = Collections.EMPTY_MAP;
빈지도가 생성됩니다. 위의 메소드는 'unchecked assignment warning'을 발생시킬 수 있으므로 다음과 같이 type-safe 형식을 사용할 수도 있습니다.
Map myMap = Collections.emptyMap ();
(2) Collections.unModifiableMap ()
unModifiableMap () 메소드는 다른지도를 인수로 사용하고 원래지도의 수정할 수없는보기를 만듭니다.
Map myMap = Collections.EMPTY_MAP; Map map_unmodifiable = Collections.unmodifiableMap (myMap);
(3) Collections.singletonMap ()
Collections 클래스는 또한 항목이 하나 뿐인 불변 싱글 톤 맵을 생성하는 팩토리 메소드 'singletonMap ()'을 제공합니다.
Map singleton_map = Collections.singletonMap('CHN', 'Beijing');
# 2) Java 8 사용
Java 8 스트림 API 메소드에서 데이터 스트림을 얻고 Collector를 사용하여 맵을 구성 할 수 있습니다.
지도를 구성하는 방법 중 일부는 다음과 같습니다.
(1) Collectors.toMap ()
스트림을 수집 한 다음 Collectors.toMap () 메서드를 사용하여지도를 구성합니다.
Map map = Stream.of(new String()(){{'USA', 'Washington'}, {'United Kingdom', 'London'} }).collect(Collectors.toMap(p -> p(0), p -> p(1)));
위의 문은 Java 8 스트림에서 맵을 생성합니다.
(2) 수집가 .collectingAndThen ()
여기서는 collector가 collectorAndThen () 메서드를 사용하여 불변지도를 생성 할 수 있도록하는 toMap () 메서드를 적용합니다.
Map immutableMap = Stream.of(new String()(){ {'USA', 'Washington'}, {'United Kingdom', 'London”} }).collect(Collectors.collectingAndThen(Collectors.toMap(p -> p (0), p -> p(1)), Collections::unmodifiableMap));
# 3) Map 인터페이스의 put 메소드 사용
맵 인터페이스의 put () 메서드를 사용하여 초기 값을 맵에 할당 할 수 있습니다.
# 4) 이중 중괄호 초기화 사용
'이중 중괄호 초기화'기술은 내부 클래스를 만듭니다. 이 클래스는 익명이며 인스턴스 이니셜 라이저가 있습니다. 이것은 선호되는 기술이 아니며 메모리 누수 또는 직렬화 문제가 발생할 수 있으므로 피해야합니다.
아래 프로그램은 위에서 논의한 다양한 맵 초기화 방법을 보여줍니다.
import java.util.*; import java.util.stream.*; import java.util.stream.Collectors; public class Main { public static void main(String args()) { //using Collections //create an empty map Map emptymap = Collections.EMPTY_MAP; //create unmodifiable map using Collections Map unmodifiableMap = Collections.unmodifiableMap(emptymap); System.out.println('unmodifiableMap map values:' + unmodifiableMap); //singleton map Map singleton_map = Collections.singletonMap(10, ' TEN'); System.out.println('
singleton_map Map values:' + singleton_map); //using Java 8 //1. toMap method of collectors class Map map_cities = Stream.of(new String()(){ {'MH', 'Mumbai'}, {'CH', 'Chennai'}, {'DL', 'New Delhi'} }).collect(Collectors.toMap(p -> p(0), p -> p(1))); System.out.println('
map_cities values: ' + map_cities); //2. collectingAndThen method Map capitals_Map = Stream.of(new String()(){ {'MAH', 'Mumbai'}, {'GOA', 'Panaji'}, {'KAR', 'Bangaluru'} }).collect(Collectors.collectingAndThen (Collectors.toMap(p -> p(0), p -> p(1)), Collections::unmodifiableMap)); System.out.println('
capitals_Map values: ' + capitals_Map); //double brace initialization Map country_map = new HashMap(); country_map.put('USA', 'Washington'); country_map.put('UK', 'London'); country_map.put('IND', 'Delhi'); country_map.put('GER', 'Berlin'); System.out.println('
Map values:' + country_map); } }
산출:
unmodifiableMap 맵 값 : {}
singleton_map지도 값 : {10 = TEN}
map_cities 값 : {CH = 첸나이, DL = 뉴 델리, MH = 뭄바이}
capitals_Map 값 : {MAH = Mumbai, GOA = Panaji, KAR = Bangaluru}
지도 값 : {USA = Washington, GER = Berlin, UK = London, IND = Delhi}
자바에서지도를 반복하고지도를 인쇄합니다.
다른 컬렉션을 순회하는 것과 같은 방식으로지도를 순회 할 수 있습니다. 지도 항목을 순회하는 것 외에도 키만 또는지도의 값만 순회 할 수 있습니다. 지도를 횡단하려면 먼저 set으로 변환해야합니다.
다음 방법은 맵 항목을 순회하는 데 사용됩니다.
항목 반복기 사용
이 방법에서 우리는 엔트리 세트에서 엔트리 반복자를 얻습니다. 그런 다음 getKey 및 getValue 메소드를 사용하여 각 맵 항목에 대한 키-값 쌍을 검색합니다.
다음 프로그램은 항목 반복기의 사용법을 보여줍니다.
import java.util.*; import java.util.stream.*; import java.util.stream.Collectors; public class Main { public static void main(String args()) { //use toMap method of collectors class to populate the map Map map_cities = Stream.of(new String()(){ {'MH', 'Mumbai'}, {'CH', 'Chennai'}, {'DL', 'New Delhi'} }).collect(Collectors.toMap(p -> p(0), p -> p(1))); //transform map to set Set entries = map_cities.entrySet(); //declare an iterator Iterator iterator = entries.iterator(); System.out.println('The map entries are:'); System.out.println(' KEY VALUE'); //iterate and print key and value pairs. while(iterator.hasNext()) { Map.Entry entry = iterator.next(); System.out.println(' ' + entry.getKey() + ' ' +entry.getValue()); } } }
산출:
맵 항목은 다음과 같습니다.
핵심 가치
CH 첸나이
DL 뉴 델리
MH 뭄바이
위의 프로그램에서 우리는 entrySet 메소드를 사용하여 맵에서 항목 반복자를 얻습니다. 그런 다음 항목 반복기의 hasNext () 메서드를 사용하여지도를 탐색하고 키-값 쌍을 인쇄합니다.
항목 for-each 루프 사용
여기서 우리는 for-each 루프를 사용하여 entrySet을 순회하며 구현은 아래와 같습니다.
import java.util.*; import java.util.stream.*; import java.util.stream.Collectors; public class Main { public static void main(String args()) { //use toMap method of collectors class to populate the map Map map_cities = Stream.of(new String()(){ {'MH', 'Mumbai'}, {'CH', 'Chennai'}, {'DL', 'New Delhi'} }).collect(Collectors.toMap(p -> p(0), p -> p(1))); System.out.println('The map entries are:'); System.out.println(' KEY VALUE'); //iterate using for each over entry set and print key and value pairs. for(Map.Entry entry : map_cities.entrySet()){ System.out.println(' ' + entry.getKey() + ' ' +entry.getValue()); } } }
산출:
맵 항목은 다음과 같습니다.
핵심 가치
CH 첸나이
DL 뉴 델리
MH 뭄바이
지도 방법
Java의 맵 인터페이스는 다른 컬렉션에서 지원하는 것과 유사한 다양한 작업을 지원합니다. 이 섹션에서는 Java에서 Map API가 제공하는 다양한 메소드에 대해 설명합니다. 이 튜토리얼의 범위는 일반적으로 맵 인터페이스를 소개하는 것으로 제한되어 있으므로 이러한 방법을 설명하지 않습니다.
맵 인터페이스 클래스를 논의하면서 이러한 메서드에 대해 자세히 설명합니다.
다음 표에는 Map API에서 제공하는 모든 메소드가 나열되어 있습니다.
방법 이름 | 방법 프로토 타입 | 기술 |
---|---|---|
가져 오기 | V get (객체 키) | 주어진 키에 대한 객체 또는 값을 반환합니다. |
놓다 | V put (객체 키, 객체 값) | 지도에 키-값 항목 삽입 |
putAll | void putAll (지도 맵) | 지도에 주어진지도 항목을 삽입합니다. 즉, 맵을 복사하거나 복제합니다. |
keySet | keySet () 설정 | 지도의 세트보기를 반환합니다. |
entrySet | 세트 | 주어진지도에 대한보기를 반환합니다. |
가치 | 컬렉션 값 () | 지도에있는 값의 컬렉션보기를 반환합니다. |
크기 | int 크기 () | 맵의 항목 수를 반환합니다. |
맑은 | 무효 clear () | 지도를 지 웁니다. |
비었다 | 부울 isEmpty () | 지도가 비어 있는지 확인하고 예인 경우 true를 반환합니다. |
containsValue | 부울 containsValue (객체 값) | 지도에 주어진 값과 같은 값이 포함되어 있으면 true를 반환합니다. |
containsKey | 부울 containsKey (객체 키) | 지정된 키가지도에 있으면 true를 반환합니다. |
같음 | 부울 같음 (Object o) | 지정된 객체 o를지도와 비교 |
해시 코드 | int hashCode () | 지도의 해시 코드를 반환합니다. |
각각 | void forEach (BiConsumer 작업) | 맵의 각 항목에 대해 주어진 작업을 수행합니다. |
getOrDefault | V getOrDefault (객체 키, V defaultValue) | 주어진 키에 지정된 값을 반환하거나 키가없는 경우 기본값을 반환합니다. |
없애다 | 부울 제거 (개체 키, 개체 값) | 지정된 키와 값을 제거합니다. |
바꾸다 | V 교체 (K 키, V 값) | 주어진 키를 지정된 값으로 대체합니다. |
바꾸다 | 부울 대체 (K 키, V oldValue, V newValue) | 주어진 키의 이전 값을 새 값으로 대체합니다. |
전부 교체 | void replaceAll (BiFunction 함수) | 모든 맵 항목을 대체하기 위해 주어진 함수를 호출합니다. |
putIfAbsent | V putIfAbsent (K 키, V 값) | 주어진 키, 값이 아직없는 경우에만 삽입합니다. |
계산하다 | V 컴퓨팅 (K 키, BiFunction remappingFunction) | 지정된 키와 매핑 함수가 주어진 값에 대한 매핑을 계산합니다. |
computeIfAbsent | V computeIfAbsent (K 키, 함수 매핑 기능) | 아직 존재하지 않는 경우 매핑 함수를 사용하여 주어진 키의 값을 계산합니다. |
computeIfPresent | V computeIfPresent (K 키, BiFunction remappingFunction) | 키 값이 이미있는 경우 지정된 다시 매핑 기능을 사용하여 지정된 키에 대한 새 매핑을 계산합니다. |
가다 | V 병합 (K 키, V 값, BiFunction 재 매핑 기능) | 지정된 키가 아직 연결되지 않았거나 null 값과 연결된 경우 값과 연결합니다. |
위의 모든 방법은지도 인터페이스에서 지원됩니다. 음영 처리 된 메서드는 Java 8에 포함 된 새로운 메서드입니다.
자바 맵 구현
다음 프로그램은 Java로 맵 예제를 구현합니다. 여기서는 위에서 설명한 대부분의 방법을 사용합니다.
이 예제는 다양한 get 작업, put 및 set 작업을 보여줍니다.
import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Set; public class Main { public static void main(String() args) { //create a map Map country_map = new HashMap(); //assign values to the map country_map.put('IND', 'India'); country_map.put('SL', 'Srilanka'); country_map.put('CHN', 'China'); country_map.put('KOR', 'Korea'); country_map.put(null, 'Z'); // null key country_map.put('XX', null); // null value String value = country_map.get('CHN'); // get System.out.println('Key = CHN, Value : ' + value); value = country_map.getOrDefault('XX', 'Default Value'); //getOrDefault System.out.println('
Key = XX, Value : ' + value); boolean keyExists = country_map.containsKey(null); //containsKey boolean valueExists = country_map.containsValue('Z'); //containsValue System.out.println('
null keyExists : ' + keyExists + ', null valueExists= ' + valueExists); Set entrySet = country_map.entrySet(); //entrySet System.out.println('
entry set for the country_map: ' + entrySet); System.out.println('
Size of country_map : ' + country_map.size()); //size Map data_map = new HashMap(); data_map.putAll(country_map); //putAll System.out.println('
data_map mapped to country_map : ' + data_map); String nullKeyValue = data_map.remove(null); //remove System.out.println('
null key value for data_map : ' + nullKeyValue); System.out.println('
data_map after removing null key = ' + data_map); Set keySet = country_map.keySet(); //keySet System.out.println('
data map keys : ' + keySet); Collection values = country_map.values(); //values System.out.println('
data map values : ' + values); country_map.clear(); //clear System.out.println('
data map after clear operation, is empty :' + country_map.isEmpty()); } }
산출:
키 = CHN, 값 : 중국
키 = XX, 값 : null
null keyExists : true, null valueExists = true
country_map에 대한 항목 세트 : (null = Z, XX = null, CHN = China, SL = Srilanka, IND = India, KOR = Korea)
country_map 크기 : 6
country_map에 매핑 된 data_map : {null = Z, XX = null, CHN = China, SL = Srilanka, IND = India, KOR = Kore
에}
data_map의 null 키 값 : Z
null 키 제거 후 data_map = {XX = null, CHN = China, SL = Srilanka, IND = India, KOR = Korea}
데이터 맵 키 : (null, XX, CHN, SL, IND, KOR)
데이터 맵 값 : (Z, null, 중국, 스리랑카, 인도, 한국)
지우기 작업 후 데이터 맵이 비어 있습니다. : true
자바에서지도 정렬
맵은 키-값 쌍으로 구성되어 있으므로 키 또는 값을 기준으로 맵을 정렬 할 수 있습니다.
이 섹션에서는 키와 값 모두에 대해 맵을 정렬합니다.
키로 정렬
키에 대한 맵을 정렬하기 위해 트리 맵을 사용할 수 있습니다. 트리 맵은 키를 자동으로 정렬합니다. 아래 Java 프로그램은 맵을 트리 맵으로 변환하고 정렬 된 키를 표시합니다.
import java.util.HashMap; import java.util.Map; import java.util.TreeMap; public class Main { public static void main(String() args) { //declare and initialize a map Map country_map = new HashMap(); country_map.put('I', 'India'); country_map.put('C', 'China'); country_map.put('A', 'America'); country_map.put('D', 'Denmark'); country_map.put('X', 'Hongkong'); //print original map System.out.println('Original Unsorted Map: '); display_map(country_map); System.out.println('
Map sorted by Key: '); //convert map to treemap and display it in which keys are auto sorted Map treecountry = new TreeMap(country_map); display_map(treecountry); } public static void display_map(Map map) { //obtain entry iterator and display key value pairs of map for (Map.Entry entry : map.entrySet()) { System.out.println(' ' + entry.getKey() + ' ' + entry.getValue()); } } }
산출:
분류되지 않은 원래지도 :
미국
C 중국
D 덴마크
X 홍콩
I 인도
키별로 정렬 된지도 :
미국
C 중국
D 덴마크
I 인도
X 홍콩
위 프로그램은 하나의 알파벳 코드를 키로, 국가 이름을 값으로 구성한 맵을 생성합니다. 먼저 정렬되지 않은 원래지도를 표시합니다. 그런 다음지도를 자동으로 키를 정렬하는 트리 맵으로 변환합니다. 마지막으로 키에 정렬 된 트리 맵을 표시합니다.
값으로 정렬
값을 기준으로지도를 정렬하려면 먼저지도를 목록으로 변환합니다. 그런 다음 비교기를 사용하여 값을 비교하고 특정 순서로 정렬하는 Collections.sort () 메서드를 사용하여이 목록을 정렬합니다.
목록이 정렬되면 연결된 목록 항목이 다시 맵에 복사되어 정렬 된 맵이 제공됩니다.
다음 Java 프로그램은 값을 기반으로 한 맵 정렬을 보여줍니다. 이 프로그램은 정렬 기능에 전달되는 LinkedHashMap을 사용합니다. 정렬 기능에서는 연결 목록으로 변환되어 정렬됩니다. 정렬 후 LinkedHashMap으로 다시 변환됩니다.
최고의 무료 Windows 10 복구 소프트웨어
import java.util.*; public class Main { public static void main(String() args) { //define and initialize a map LinkedHashMap capitals_map = new LinkedHashMap(); capitals_map.put('NEP', 'Kathmandu'); capitals_map.put('IND', 'New Delhi'); capitals_map.put('USA', 'Washington'); capitals_map.put('UK', 'London'); capitals_map.put('AUS', 'Canberra'); //print original map System.out.println('Original unsorted map: '); System.out.println(capitals_map); //call sortMap method Map sorted_Map = sortMap(capitals_map); //print the sorted map System.out.println('
Map sorted on value : '); System.out.println(' Key Value '); for (Map.Entry entry : sorted_Map.entrySet()) { System.out.println(' ' + entry.getKey()+ ' ' + entry.getValue()); } } public static LinkedHashMap sortMap(LinkedHashMap linked_map) { //create a linkedlist from LinkedHashMap List capital_List = new LinkedList(linked_map.entrySet()); //sort the LinkedList Collections.sort(capital_List, (o1, o2) -> o1.getValue().compareTo(o2.getValue())); //Create LinkedHashMap from linkedlist and return it LinkedHashMap finalMap = new LinkedHashMap(); for (Map.Entry entry : capital_List) { finalMap.put(entry.getKey(), entry.getValue()); } return finalMap; } }
산출:
정렬되지 않은 원래 맵 :
{NEP = 카트만두, IND = 미국 뉴 델리 = 워싱턴, 영국 = 런던, AUS = 캔버라
값에 따라 정렬 된지도 :
핵심 가치
캔버라에서
NEP 카트만두
영국 런던
IND 뉴 델리
미국 워싱턴
자바의 동시지도
concurrentMap은 java.util.map 인터페이스에서 상속 된 인터페이스입니다. concurrentMap 인터페이스는 JDK 1.5에서 처음 도입되었으며 동시 액세스를 처리하는 맵을 제공합니다.
concurrentMap 인터페이스는 java.util.concurrent 패키지의 일부입니다.
다음 Java 프로그램은 Java의 concurrentMap을 보여줍니다.
import java.util.concurrent.*; class Main { public static void main(String() args) { //create and initialize concurrentHashMap ConcurrentHashMap m = new ConcurrentHashMap(); m.put(100, 'Red'); m.put(101, 'Green'); m.put(102, 'Blue'); System.out.println('
Initial Concurrent Map : ' + m); //add a key using putIfAbsent method; key=103 is absent so its added m.putIfAbsent(103, 'Purple'); System.out.println('
After adding absent key 103 : ' + m); m.remove(101, 'Green'); // remove key = 101 System.out.println('
Concurrent Map after removing 101:' + m); m.putIfAbsent(101, 'Brown'); // again add key = 101 since its absent System.out.println('
Add absent key 101:' + m); m.replace(101, 'Brown', 'Green'); // replace value for key = 101 with 'Green' System.out.println('
Replace value at key 101:' + m); } } import java.util.concurrent.*; class Main { public static void main(String() args) { //create and initialize concurrentHashMap ConcurrentHashMap m = new ConcurrentHashMap(); m.put(100, 'Red'); m.put(101, 'Green'); m.put(102, 'Blue'); System.out.println('
Initial Concurrent Map : ' + m); //add a key using putIfAbsent method; key=103 is absent so its added m.putIfAbsent(103, 'Purple'); System.out.println('
After adding absent key 103 : ' + m); m.remove(101, 'Green'); // remove key = 101 System.out.println('
Concurrent Map after removing 101:' + m); m.putIfAbsent(101, 'Brown'); // again add key = 101 since its absent System.out.println('
Add absent key 101:' + m); m.replace(101, 'Brown', 'Green'); // replace value for key = 101 with 'Green' System.out.println('
Replace value at key 101:' + m); } }
산출:
초기 동시지도 : {100 = 빨간색, 101 = 녹색, 102 = 파란색}
없는 키 103 추가 후 : {100 = 빨간색, 101 = 녹색, 102 = 파란색, 103 = 보라색}
101을 제거한 후 동시지도 : {100 = 빨간색, 102 = 파란색, 103 = 보라색}
없는 키 101 추가 : {100 = 빨간색, 101 = 갈색, 102 = 파란색, 103 = 보라색}
키 101에서 값 바꾸기 : {100 = 빨간색, 101 = 녹색, 102 = 파란색, 103 = 보라색}
자바에서 동기화 된지도
동기화 된 맵은 스레드로부터 안전한 맵이며 지정된 맵에서 지원됩니다. Java에서는 java.util.Collections 클래스의 동기화 된 맵 () 메소드를 사용하여 동기화 된 맵을 얻습니다. 이 메소드는 지정된지도에 대해 동기화 된지도를 반환합니다.
이 반환 된 동기화 된 맵은 직렬 액세스를 달성하기 위해 백업 맵에 액세스하는 데 사용됩니다.
동기화 된 맵 () 메서드의 일반적인 선언은 다음과 같습니다.
public static Map synchronizedMap(Map m)
여기서 m =>은 백업 된 맵입니다.
이미 언급했듯이이 메서드는 맵 m의 동기화 된 뷰를 반환합니다.
아래 Java 프로그램은 동기화 된 맵의 예입니다.
import java.util.*; public class Main { public static void main(String() args) { //declare and initialize a map Map int_map = new HashMap(); int_map.put(1, 10); int_map.put(2, 20); int_map.put(3, 30); int_map.put(4, 40); int_map.put(5, 50); //print the map System.out.println('Original (backed) Map: ' + int_map); //obtain synchronized map Map sync_map = Collections.synchronizedMap(int_map); //remove an element from the map int_map.remove(3, 30); //print the altered map System.out.println('
Synchronized map after remove(3, 30):' + sync_map); } }
산출:
원본 (백업)지도 : {1 = 10, 2 = 20, 3 = 30, 4 = 40, 5 = 50}
제거 후 동기화 된 맵 (3, 30) : {1 = 10, 2 = 20, 4 = 40, 5 = 50}
자바의 정적지도
Java의 정적 맵은 정적 변수처럼 정적으로 선언 된 맵입니다. 맵을 정적으로 선언하면 객체를 사용하지 않고도 액세스 가능한 클래스 변수가됩니다.
자바에서 정적지도를 만들고 초기화하는 방법에는 두 가지가 있습니다.
# 1) 정적 변수 사용
여기에서 정적 맵 변수를 만들고 선언과 함께 인스턴스화합니다.
이 접근 방식은 다음 Java 프로그램에서 설명합니다.
import java.util.*; class Main { //declare a static map variable and initialize it with declaration private static final Map myMap = new HashMap(){ { put(1, 'India'); put(2, 'Portugal'); put(3, 'Germany'); } }; public static void main(String() args) { //print the map System.out.println('Static map using static map variable:'); System.out.println(myMap); } }
산출:
정적지도 변수를 사용하는 정적지도 :
{1 = 인도, 2 = 포르투갈, 3 = 독일}
# 2) 정적 블록 사용
여기에서 정적지도 변수를 만듭니다. 그런 다음 정적 블록을 만들고이 정적 블록 내부에서지도 변수를 초기화합니다.
아래 프로그램이이를 보여줍니다.
import java.util.*; class Main { // Declare the static map private static Map map; // declare a static block and initialize static map static { map = new HashMap(); map.put(1, 'Red'); map.put(2, 'Green'); map.put(3, 'Blue'); } public static void main(String() args) { System.out.println('Static Map using static block:'); System.out.println(map); } }
산출:
정적 블록을 사용하는 정적지도 :
{1 = 빨간색, 2 = 녹색, 3 = 파란색}
목록을지도로 변환
이 섹션에서는 목록을 맵으로 변환하는 방법에 대해 설명합니다.
두 가지 방법은 다음과 같습니다.
전통적인 방법
전통적인 방법에서 각 목록 요소는 for-each 루프를 사용하여 맵에 복사됩니다.
이 구현은 다음과 같습니다.
import java.util.*; public class Main { public static void main(String() args) { //declare and initialize a list List colorsList = new ArrayList(); colorsList.add('Red'); colorsList.add('Green'); colorsList.add('Blue'); colorsList.add('Brown'); colorsList.add('White'); System.out.println('The given list: ' + colorsList); //declare a map Map map = new HashMap(); //initial Id(key) int i=1; //assign each list element to the map for (String color : colorsList) { map.put(i, color); i++; } //print the map System.out.println('Map generated from List:' + map); } }
산출:
주어진 목록 : (빨강, 녹색, 파랑, 갈색, 흰색)
목록에서 생성 된지도 : {1 = 빨간색, 2 = 녹색, 3 = 파란색, 4 = 갈색, 5 = 흰색}
Java 8에서 매핑 할 목록
또한 주어진 목록을 맵으로 변환하는 Java 8 메소드 Collectors.mapOf ()를 사용할 수 있습니다.
아래 프로그램이이를 보여줍니다.
import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.stream.Collectors; // class for list class Subject { //sub_id => map key private Integer sub_id; // sub_name => map value private String sub_name; // Subject constructor public Subject(Integer sub_id, String sub_name) { // initialize sub_id and sub_name this.sub_id = sub_id; this.sub_name = sub_name; } // return sub_id public Integer getSub_Id() { return sub_id; } // return sub_name public String getSub_Name() { return sub_name; } } public class Main { public static void main(String() args) { // create a list and add values to the list List sub_list = new ArrayList(); sub_list.add(new Subject(1, 'Abacus')); sub_list.add(new Subject(2, 'Maths')); sub_list.add(new Subject(3, 'Physics')); sub_list.add(new Subject(3, 'Chemistry')); //use Java 8 Collectors.toMap() method to create a map and assign list elements to it LinkedHashMap sub_map = sub_list.stream() .collect( Collectors.toMap(Subject::getSub_Id, Subject::getSub_Name,(x, y) -> x + ', ' + y, LinkedHashMap::new)); //print the map System.out.println('Map obtained from list : ' + sub_map); } }
산출:
목록에서 얻은지도 : {1 = Abacus, 2 = 수학, 3 = 물리, 화학}
이 프로그램에는 목록 클래스 역할을하는 Subject 클래스가 있습니다. Subject 클래스에는 sub_id와 sub_name이라는 두 개의 필드가 있습니다. 클래스에서 필드 값을 읽는 방법이 있습니다. 주 함수에서이 클래스의 객체를 만들고 목록을 구성합니다.
그런 다음이 목록은 요소를 하나씩 가져 오는 Collectors.MapOf 메서드를 사용하여 맵으로 변환됩니다. 또한 sub_Id를지도의 키로 사용합니다. 마지막으로 sub_Id를 키로, Sub_Name을 값으로 갖는 맵이 생성됩니다.
Java에서 맵을 문자열로 변환
맵 컬렉션은 두 가지 방법을 사용하여 문자열로 변환 할 수 있습니다.
StringBuilder 사용
여기에서 StringBuilder 객체를 생성 한 다음 맵의 키-값 쌍을 StringBuilder 객체에 복사합니다. 그런 다음 StringBuilder 객체를 문자열로 변환합니다.
아래 프로그램은 맵을 문자열로 변환하는 Java 코드를 보여줍니다.
import java.util.*; import java.util.stream.Collectors; public class Main { public static void main(String() args) { //create and initialize a map Map numberNames = new HashMap(); numberNames.put(10, 'Ten'); numberNames.put(20, 'Twenty'); numberNames.put(30, 'Thirty'); numberNames.put(40, 'Forty'); //print the given map System.out.println('The given map: ' + numberNames); //create a StringBuilder object to store string StringBuilder map_String = new StringBuilder('{'); //append key-value pair of map to StringBuilder object for (Integer key : numberNames.keySet()) { map_String.append(key + '=' + numberNames.get(key) + ', '); } map_String.delete(map_String.length()-2, map_String.length()).append('}'); //print the string from StringBuilder System.out.println('
The string representation of map:'); System.out.println(map_String.toString()); } }
산출:
주어진지도 : {20 = Twenty, 40 = Forty, 10 = Ten, 30 = Thirty}
맵의 문자열 표현 :
{20 = 20, 40 = 40, 10 = 10, 30 = 30}
자바 8 스트림 사용
이 방법에서는 맵 키에서 스트림을 생성 한 다음 문자열로 변환합니다.
아래에 주어진 프로그램은 스트림을 사용하여 맵을 문자열로 변환하는 것을 보여줍니다.
import java.util.*; import java.util.stream.Collectors; public class Main{ public static void main(String() args) { //create and initialize a map Map numberNames = new HashMap(); numberNames.put(10, 'Ten'); numberNames.put(20, 'Twenty'); numberNames.put(30, 'Thirty'); numberNames.put(40, 'Forty'); //print the given map System.out.println('The given map: ' + numberNames); String map_String = numberNames.keySet().stream() .map(key -> key + '=' + numberNames.get(key)) .collect(Collectors.joining(', ', '{', '}')); //print the string System.out.println('
The string representation of map:'); System.out.println(map_String); } }
산출:
주어진지도 : {20 = Twenty, 40 = Forty, 10 = Ten, 30 = Thirty}
맵의 문자열 표현 :
{20 = 20, 40 = 40, 10 = 10, 30 = 30}
지도를 자바 목록으로 변환
맵은 키와 값으로 구성되는 반면 목록은 개별 요소의 시퀀스입니다. 맵을 목록으로 변환 할 때 일반적으로 키를 키 목록으로 변환하고 값을 값 목록으로 변환합니다.
다음 Java 프로그램은이 변환을 보여줍니다.
import java.util.*; public class Main { public static void main(String() args) { //declare a map and initialize it Map color_map = new HashMap(); color_map.put(10, 'red'); color_map.put(20, 'green'); color_map.put(30, 'blue'); color_map.put(40, 'cyan'); color_map.put(50, 'magenta'); //print the list of keys using map.keySet() method System.out.println('List of keys from the given map:'); List key_list = new ArrayList(color_map.keySet()); System.out.println(key_list); //print the list of values using map.values() method System.out.println('
List of values from the given map:'); List val_list = new ArrayList(color_map.values()); System.out.println(val_list); } }
산출:
주어진 맵의 키 목록 :
(50, 20, 40, 10, 30)
주어진지도의 값 목록 :
(마젠타, 녹색, 청록색, 빨간색, 파란색)
사전 대. 자바지도
자바에서 사전과지도의 몇 가지 주요 차이점을 살펴 보겠습니다.
자동화 테스트 인터뷰 질문 및 답변
사전 | 지도 |
---|---|
사전은 추상 클래스입니다. | 지도는 인터페이스입니다. |
사전 클래스에서 사용하는 클래스 및 메서드는 컬렉션 프레임 워크보다 이전 버전입니다. | 지도 클래스에서 사용하는 클래스와 메서드는 컬렉션 프레임 워크의 일부입니다. |
클래스가 사전을 확장하는 경우 Java는 단일 상속 만 지원하므로 다른 클래스를 확장 할 수 없습니다. | 맵은 인터페이스이므로 클래스는 맵 및 기타 인터페이스에서 상속 할 수 있습니다. |
이전 구현. 최신 버전의 Java에서는 거의 사용되지 않습니다. | 지도 인터페이스가 사전 구현을 대체했습니다. |
자주 묻는 질문
Q # 1) Java에서지도 인터페이스를 사용하는 이유는 무엇입니까?
대답: 맵은 데이터를 키-값 쌍으로 저장하는 클래스에 의해 구현되는 Java의 인터페이스입니다. 지도 인터페이스는 삽입, 업데이트, 삭제 등과 같은 키-값 쌍에서 수행 할 수있는 작업 / 방법을 제공합니다.
질문 # 2)Java에서 MAP는 무엇을 의미합니까?
대답: Java의 맵은 특정 값이있는 키의 매핑을 나타냅니다. Java 맵은 이러한 키-값 쌍을 맵에 저장합니다. 지도에서 키를 사용하여 키와 관련된 값을 조회하고 검색 할 수 있습니다.
맵은 Collection 인터페이스의 일부가 아닌 인터페이스를 사용하여 Java로 구현됩니다. 그러나지도는 컬렉션입니다.
질문 # 3)MAP Get이란 무엇입니까?
대답: get ()은 get () 메소드에 대한 인수로 제공된 특정 키와 연관된 값을 검색하는 데 사용되는 Java의 맵 인터페이스에서 제공하는 메소드입니다. 값이 없으면 null이 반환됩니다.
질문 # 4)지도가 컬렉션인가요?
대답: 지도는 일반적으로 컬렉션으로 표시되지만 컬렉션 인터페이스를 구현하지 않습니다. 트리 맵과 같은 일부 map 구현은 null 값 또는 키를 지원하지 않습니다.
질문 # 5)세트와 맵의 차이점은 무엇입니까?
대답: 세트는 키의 모음 인 반면 맵은 키-값 쌍의 모음입니다. 집합은 null 값을 허용하지 않지만 일부지도 구현은 null 값을 허용합니다.
설정은 중복 키를 허용하지 않습니다. 맵은 중복 값을 허용 할 수 있지만 키는 고유해야합니다. 집합은 일반적으로 고유 한 요소 모음을 저장하려는 경우에 사용됩니다. 맵은 키-값 쌍의 형태로 데이터를 저장해야 할 때 사용할 수 있습니다.
결론
이 자습서에서는지도 인터페이스의 기본 사항에 대해 설명했습니다. 또한 Java의 맵 인터페이스와 관련된 다양한 메소드 및 기타 모든 세부 사항을 살펴 보았습니다. 트리 맵, 해시 맵 등 다양한 맵 인터페이스 구현이 있음을 알게되었습니다.
다음 튜토리얼에서는이 맵 구현에 대해 자세히 설명합니다.
=> 처음부터 Java를 배우려면 여기를 방문하십시오.