java map interface tutorial with implementation examples
この包括的なJavaマップチュートリアルでは、マップを作成、初期化、および反復する方法について説明します。また、マップメソッドと実装例についても学習します。
マップインターフェイスの基本、マップインターフェイスでサポートされているメソッド、およびマップインターフェイスに関連するその他の特定の用語について学習します。
JavaのMapsコレクションは、キーを値にマップするコレクションです。キーと値で構成されるコレクションです。マップの各エントリは、対応する値を持つキーで構成されています。キーはマップ内で一意です。マップは通常、キー値に基づいてコレクションを変更する必要がある場合に使用できます。
=> ここですべてのJavaチュートリアルを確認してください。
学習内容:
Javaのマップ
Javaのマップは、java.util.mapインターフェースの一部です。マップインターフェイスはコレクションインターフェイスの一部ではないため、マップが他のコレクションと異なるのはそのためです。
マップインターフェイスの一般的な階層を以下に示します。
上に示したように、マップを実装するための2つのインターフェース、つまりマップインターフェースとsortedMapインターフェースがあります。 HashMap、TreeMap、LinkedHashMapの3つのクラスがあります。
これらのマップタイプについて、以下で説明します。
クラス | 説明 | |
---|---|---|
削除する | V remove(オブジェクトキー) | 指定されたキーのマップエントリを削除します |
LinkedHashMap | HashMapクラスから拡張します。このマップは挿入順序を維持します | |
HashMap | マップインターフェイスを実装します。 HashMapによって順序が維持されることはありません。 | |
TreeMap | mapインターフェイスとsortedMapインターフェイスの両方を実装します。 TreeMapは昇順を維持します。 |
マップについて覚えておくべきポイント。
- マップでは、各キーは最大で1つの値にマップできます。また、マップに重複するキーを含めることはできません。
- HashMapやLinkedHashMapなどのマップ実装では、nullキーとnull値を使用できます。ただし、TreeMapでは許可されていません。
- マップをそのままトラバースすることはできません。したがって、トラバースするには、keyset()またはentrySet()メソッドを使用してsetに変換する必要があります。
Javaでマップを作成する
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();
上記の定義には、文字列型のキーと値としてのオブジェクトが含まれます。
Javaでマップを初期化する
次の方法で初期化できます。
#1)コレクションの使用
Javaコレクションクラスには、マップを含むコレクションを初期化するために使用できるファクトリメソッドがあります。
マップの初期化に使用されるいくつかの方法は次のとおりです。
(1)Collections.EmptyMap()
Collections.EmptyMap()は、空のシリアル化可能で不変のマップを返します。 例えば、 次のコード行、
Map myMap = Collections.EMPTY_MAP;
これにより、空のマップが作成されます。上記の方法では「未チェックの割り当て警告」がスローされる可能性があるため、次のようにタイプセーフフォームを使用することもできます。
Map myMap = Collections.emptyMap ();
(2)Collections.unModizableMap()
unModizableMap()メソッドは、引数として別のマップを取り、元のマップの変更不可能なビューを作成します。
Map myMap = Collections.EMPTY_MAP; Map map_unmodifiable = Collections.unmodifiableMap (myMap);
(3)Collections.singletonMap()
Collectionsクラスは、エントリが1つしかない不変のシングルトンマップを作成するファクトリメソッド「singletonMap()」も提供します。
Map singleton_map = Collections.singletonMap('CHN', 'Beijing');
#2)Java8の使用
Java 8ストリームAPIメソッドからデータのストリームを取得し、コレクターを使用してマップを作成できます。
マップを作成する方法のいくつかは次のとおりです。
(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)));
上記のステートメントは、Java8ストリームからマップを作成します。
(2)Collectors.collectingAndThen()
ここでは、collectingAndThen()メソッドを使用してコレクターが不変のマップを生成できるようにする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)マップインターフェイスの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); } }
出力:
unmodizableMapマップ値:{}
singleton_mapマップ値:{10 = TEN}
map_cities値:{CH =チェンナイ、DL =ニューデリー、MH =ムンバイ}
Capitals_Map値:{MAH =ムンバイ、GOA =パナジ、KAR =バンガロール}
マップ値:{USA =ワシントン、GER =ベルリン、UK =ロンドン、IND =デリー}
Javaでマップを反復処理し、マップを印刷します
他のコレクションをトラバースするのと同じ方法で、マップをトラバースできます。マップエントリのトラバースに加えて、キーのみまたはマップ内の値のみをトラバースすることもできます。マップをトラバースするには、最初にセットに変換する必要があることに注意してください。
次のメソッドは、マップエントリをトラバースするために使用されます。
エントリイテレータの使用
この方法では、エントリセットからエントリイテレータを取得します。次に、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ループを使用して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のMapAPIによって提供されるさまざまなメソッドについて説明します。このチュートリアルの範囲は一般にマップインターフェイスの紹介に限定されているため、これらのメソッドについては説明しません。
マップインターフェイスクラスについて説明しながら、これらのメソッドについて詳しく説明します。
次の表に、mapAPIによって提供されるすべてのメソッドを示します。
メソッド名 | メソッドプロトタイプ | 説明 |
---|---|---|
取得する | V get(オブジェクトキー) | 指定されたキーのオブジェクトまたは値を返します |
置く | V put(オブジェクトキー、オブジェクト値) | マップにKey-Valueエントリを挿入します |
putAll | void putAll(マップマップ) | 指定されたマップエントリをマップに挿入します。つまり、マップをコピーまたは複製します。 |
keySet | keySet()を設定します | マップのセットビューを返します。 |
entrySet | セットする | 戻り値は、特定のマップのビューを設定します |
値 | コレクションvalues() | マップ内の値のコレクションビューを返します。 |
サイズ | int size() | マップ内のエントリ数を返します |
晴れ | void clear() | マップをクリアします |
isEmpty | ブールisEmpty() | マップが空かどうかを確認し、空の場合はtrueを返します。 |
containsValue | ブールcontainsValue(オブジェクト値) | マップに指定された値と等しい値が含まれている場合はtrueを返します |
containsKey | ブールcontainsKey(オブジェクトキー) | 指定されたキーがマップに存在する場合はtrueを返します |
等しい | boolean equals(Object o) | 指定されたオブジェクトoをマップと比較します |
ハッシュコード | int hashCode() | マップのハッシュコードを返します |
forEach | void forEach(BiConsumerアクション) | マップのエントリごとに指定されたアクションを実行します |
getOrDefault | V getOrDefault(オブジェクトキー、V defaultValue) | 指定されたキーに指定された値、またはキーが存在しない場合はそのデフォルト値を返します |
削除する | boolean remove(オブジェクトキー、オブジェクト値) | 指定されたキーと値を削除します |
交換 | V置換(Kキー、V値) | 指定されたキーを指定された値に置き換えます |
交換 | boolean replace(K key、V oldValue、V newValue) | 指定されたキーの古い値を新しい値に置き換えます |
replaceAll | void replaceAll(BiFunction関数) | 指定された関数を呼び出して、すべてのマップエントリを置き換えます |
putIfAbsent | V putIfAbsent(Kキー、V値) | 指定されたキー、値がまだ存在しない場合にのみ挿入します |
計算する | V計算(Kキー、BiFunction remappingFunction) | マッピング関数を指定して、指定されたキーと値のマッピングを計算します。 |
computeIfAbsent | V computeIfAbsent(Kキー、関数mappingFunction) | まだ存在しない場合は、マッピング関数を使用して、指定されたキーの値を計算します。 |
computeIfPresent | V computeIfPresent(K key、BiFunction remappingFunction) | キー値がすでに存在する場合は、指定された再マッピング関数を使用して、指定されたキーの新しいマッピングを計算します |
行く | Vマージ(Kキー、V値、BiFunction remappingFunction) | 指定されたキーがまだ関連付けられていないか、null値に関連付けられている場合は、そのキーを値に関連付けます。 |
上記のすべてのメソッドは、マップインターフェイスでサポートされています。影付きで表示されるメソッドは、Java8に含まれている新しいメソッドであることに注意してください。
Javaマップの実装
次のプログラムは、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 =中国、SL =スリランカ、IND =インド、KOR =韓国)
country_mapのサイズ:6
country_mapにマップされたdata_map:{null = Z、XX = null、CHN =中国、SL =スリランカ、IND =インド、KOR =韓国
に}
data_mapのnullキー値:Z
nullキーを削除した後のdata_map = {XX = null、CHN =中国、SL =スリランカ、IND =インド、KOR =韓国}
データマップキー:(null、XX、CHN、SL、IND、KOR)
データマップ値:(Z、null、中国、スリランカ、インド、韓国)
クリア操作後のデータマップは空です:true
Javaでマップを並べ替える
マップはキーと値のペアで構成されているため、キーまたは値でマップを並べ替えることができます。
このセクションでは、キーと値の両方でマップを並べ替えます。
キーで並べ替え
キーでマップを並べ替えるには、ツリーマップを使用できます。ツリーマップはキーを自動的にソートします。以下の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香港
私はインド
キーでソートされたマップ:
アメリカ
C中国
Dデンマーク
私はインド
X香港
上記のプログラムは、キーとして単一のアルファベットコード、値として国名で構成されるマップを作成します。まず、ソートされていない元のマップを表示します。次に、マップをツリーマップに変換して、キーを自動的に並べ替えます。最後に、ソートされたツリーマップをキーに表示します。
値で並べ替え
値に基づいてマップを並べ替えるには、最初にマップをリストに変換します。次に、コンパレータを使用して値を比較し、特定の順序で並べるCollections.sort()メソッドを使用して、このリストを並べ替えます。
リストがソートされると、リンクされたリストエントリが再びマップにコピーされ、ソートされたマップが得られます。
次のJavaプログラムは、値に基づいたマップのソートを示しています。プログラムは、ソート関数に渡されるLinkedHashMapを使用します。ソート機能では、リンクリストに変換してソートします。ソート後、LinkedHashMapに変換されます。
二分木c ++の実装
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 =ニューデリー、USA =ワシントン、UK =ロンドン、AUS =キャンベラ
値でソートされたマップ:
キーバリュー
キャンベラから
NEPカトマンズ
英国ロンドン
INDニューデリー
アメリカワシントン
Javaでの並行マップ
コンカレントマップは、java.util.mapインターフェースから継承するインターフェースです。コンカレントマップインターフェースはJDK1.5で最初に導入され、同時アクセスを処理するマップを提供します。
コンカレントマップインターフェースは、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では、同期マップはjava.util.CollectionsクラスのsynchronizedMap()メソッドを使用して取得されます。このメソッドは、指定されたマップの同期されたマップを返します。
この返された同期マップは、シリアルアクセスを実現するためにバッキングマップにアクセスするために使用されます。
synchronizedMap()メソッドの一般的な宣言は次のとおりです。
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}
remove(3、30)後の同期マップ:{1 = 10、2 = 20、4 = 40、5 = 50}
Javaの静的マップ
Javaの静的マップは、静的変数と同じように静的と宣言されたマップです。マップを静的と宣言することにより、オブジェクトを使用せずにアクセス可能なクラス変数になります。
Javaで静的マップを作成および初期化するには2つのアプローチがあります。
#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 =青}
最高のmp3コンバーターは何ですか
リストのマップへの変換
このセクションでは、リストをマップに変換する方法について説明します。
2つの方法は次のとおりです。
従来の方法
従来の方法では、各リスト要素は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 =白}
Java8でマップするリスト
指定されたリストをマップに変換するJava8メソッド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 =そろばん、2 =数学、3 =物理学、化学}
このプログラムには、リストクラスとして機能するSubjectクラスがあります。クラスSubjectには、sub_idとsub_nameの2つのフィールドがあります。クラスからフィールド値を読み取るメソッドがあります。 main関数では、このクラスのオブジェクトを作成し、リストを作成します。
次に、このリストは、要素を1つずつ取得するCollectors.MapOfメソッドを使用してマップに変換されます。また、マップへのキーとしてsub_Idを取ります。最後に、キーとしてsub_Idを持ち、値としてSub_Nameを持つマップが生成されます。
Javaでマップを文字列に変換する
マップコレクションは、次の2つの方法を使用して文字列に変換できます。
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 = 20、40 = 40、10 = 10、30 = 30}
マップの文字列表現:
{20 = 20、40 = 40、10 = 10、30 = 30}
Java8ストリームの使用
この方法では、マップキーからストリームを作成し、それを文字列に変換します。
以下に示すプログラムは、ストリームを使用したマップの文字列への変換を示しています。
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 = 20、40 = 40、10 = 10、30 = 30}
マップの文字列表現:
{20 = 20、40 = 40、10 = 10、30 = 30}
Javaでマップをリストに変換する
マップはキーと値で構成されますが、リストは個々の要素のシーケンスです。マップをリストに変換するとき、通常、キーをキーのリストに変換し、値を値のリストに変換します。
次の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の辞書と地図の主な違いのいくつかについて説明しましょう。
辞書 | 地図 |
---|---|
辞書は抽象クラスです。 | マップはインターフェースです。 |
ディクショナリクラスで使用されるクラスとメソッドは、コレクションフレームワークよりも前のものです。 | マップクラスで使用されるクラスとメソッドは、コレクションフレームワークの一部です。 |
クラスがディクショナリを拡張する場合、Javaは単一の継承のみをサポートするため、他のクラスを拡張することはできません。 | マップはインターフェースであるため、クラスはマップや他のインターフェースから継承できます |
古い実装。新しいバージョンのJavaではほとんど廃止されています。 | マップインターフェイスは、辞書の実装に取って代わりました。 |
よくある質問
Q#1)Javaでマップインターフェイスを使用するのはなぜですか?
回答: マップは、データをキーと値のペアとして格納するクラスによって実装されるJavaのインターフェースです。マップインターフェイスは、挿入、更新、削除などのキーと値のペアで実行できる操作/メソッドを提供します。
Q#2)JavaでMAPはどういう意味ですか?
回答: Javaのマップは、特定の値を持つキーのマッピングを表します。 Javaマップは、これらのキーと値のペアをマップに格納します。マップ内のキーを使用するだけで、キーに関連付けられた値を検索して取得できます。
マップは、コレクションインターフェイスの一部ではないインターフェイスを使用してJavaで実装されます。しかし、地図はコレクションです。
Q#3)MAP getとは何ですか?
回答: get()は、Javaのマップインターフェイスによって提供されるメソッドであり、get()メソッドの引数として提供される特定のキーに関連付けられた値を取得するために使用されます。値が存在しない場合は、nullが返されます。
Q#4)マップはコレクションですか?
回答: マップは一般にコレクションとして表示されますが、コレクションインターフェイスは実装されていません。ツリーマップなど、mapの実装の一部は、null値またはキーをサポートしていません。
Q#5)セットとマップの違いは何ですか?
回答: セットはキーのみのコレクションですが、マップはキーと値のペアのコレクションです。セットはnull値を許可しませんが、一部のマップ実装はnull値を許可します。
セットは重複キーを許可しません。マップは重複する値を許可する場合がありますが、キーは一意である必要があります。セットは通常、一意の要素のコレクションを格納する場合に使用されます。このマップは、キーと値のペアの形式でデータを格納する必要がある場合に使用できます。
結論
このチュートリアルでは、マップインターフェイスの基本について説明しました。また、Javaのマップインターフェイスに関連するさまざまなメソッドやその他すべての詳細についても見てきました。ツリーマップ、ハッシュマップなど、マップインターフェイスにはさまざまな実装があることがわかりました。
今後のチュートリアルでは、このマップの実装について詳しく説明します。
=> ゼロからJavaを学ぶには、ここにアクセスしてください。