地図インターフェイスの概要:
IPアドレスとホスト名、ID番号と個人、システムのユーザーと他のオブジェクトとシステム・ユーザー名、マッピングと呼ばれる1人の関係には、この1:実際の生活の中で、私たちはしばしば、このようなコレクションを参照してください。Javaのようなオブジェクト・リレーショナル・オブジェクト、即ちインタフェースを格納するために使用される特殊なコレクションクラスを提供java.util.Map
Collectionインタフェースの違いを持つMapインタフェース:
単離された要素のセットのコレクション格納要素コレクションに記憶素子を介して、(単一理解されるように)存在しています。
コレクションのマップ、素子対は、(夫と妻として理解することができる)が存在します。各要素は、2つの部分、キーと値から成り、対応する値は、キーを介して求めることができます。
コレクションシングルコレクションは、デュアル列セットと呼ばれる地図セットのセットを、と呼ばれています。
注、地図のセットは重複キーを含めることができないこと、値を繰り返すことができる。一つの値だけに、各キーに相当します。
人気のサブカテゴリの地図:
HashMapの順次ハッシュテーブル構造にアクセスするために使用されるデータを格納する、要素は一貫保証することはできません。保証一意ではなく、重複キーのために、のhashCode()メソッド、等しい()メソッドを書き換えることするキーを必要とします。
LinkedHashMap:HashMapのサブクラスのLinkedHashMap、ハッシュテーブルのデータ構造を採用リスト構造+を記憶しています。ハッシュテーブル構造によって繰り返さないユニークで、キーが結合の書き換えのhashCode()メソッドに等しい()メソッドを必要としたことを確実にすることができる、リンクされたリスト構造一貫したアクセスシーケンス要素を確実にすることができます。
一般的な方法インタフェース地図
マップ・インターフェースは、以下のように一般的に使用されるメソッドの数を定義します。
パブリックVプット(Kキー、V値):地図指定されたコレクションのキーの指定した値を追加します。
パブリックV削除(オブジェクトキー):Mapの要素のセットを削除するには、キーに対応する指定されたキーは、要素の戻り値は削除されます。
パブリックVの取得(オブジェクトキー)、指定されたキーを持つ地図でセットに対応する値を取得します。
公共の設定<K>のkeySet():地図セットコレクションに保存されているすべてのキーを設定して取得します。
公共の設定<のMap.Entry <K、V >>のentrySetは():すべてのオブジェクトのキーと値のペアのコレクション地図コレクション(セットコレクション)を取得します。
1 パッケージdemosummary.map;
2
。3 インポートたjava.util.HashMap;
4。 インポートjava.util.Map;
5。 インポートjava.util.Set;
6。
7。 / **
8。 *公衆VのPUT(キーK、V値):指定されたキーで指定された値は、コレクション地図に追加されます。
9 *
10 *公共V(オブジェクトキー)は、指定されたキーを持つMapのセットに対応する値を取得GET。
。11 *
12がある 公共のV削除(オブジェクトキー)*:キーに対応する指定されたキーは、地図内の要素のセットを削除するには、要素の戻り値は削除されます。
13はある *
14 *公共の設定<K>のkeySet():地図コレクションセットに保存されているすべてのキーを設定して取得します。
15 *
16 *公共の設定<のMap.Entry <K、 V >>のentrySet(): すべてのオブジェクトのキーと値のペアのコレクション地図コレクション(セットコレクション)を取得します。
17 * /
18である パブリック クラスMapMethods {
19。 パブリック 静的 ボイドメイン(文字列[]引数){
20である / **
21である *公衆VのPUT(キーK、V値):地図指定されたセットにキーの指定した値を加算。
22 * /
23 // マップコレクション作成
24 のHashMap <文字列、文字列>マップ= 新しい新しい HashMapを<> ();
25 // 要素を追加
26 map.put( "マン・キング"、 "アシュトン" );
27 map.put( "ガレン"、 "カトリーナ" );
28 map.put( "カード"、 "未亡人" );
29 // 印刷マップセット
30 のSystem.out.println(地図); // {=未亡人カード、キング=非常に石、ガレノスカタリナ} =
31は、
32 / **
33である *公共V(オブジェクトキー)、指定されたキーを持つマップの設定に対応する値を取得するGET。
34である * /
35 ( "マン・キング" = map.get結果として文字列);
36 のSystem.out.println(結果); // アイヒ
37 [
38です / **
39 *公共V(オブジェクトキー)削除:指定されたキーを要素の集合に対応する削除キー地図、要素は、戻り値を削除しました。
40 * /
41である 文字列結果1 = map.remove( "男キング" );
42 System.out.println(結果1); // アイヒホルン
43である のSystem.out.println(MAP); // {=カード未亡人、キャサリンガレノスは=}
44である
45 / **
46である *公衆セット<K>キーセット():セットコレクションに保存されているすべてのキーの地図コレクションを取得します。
47 * /
48 セットの<string> SET = map.keySet();
49 のSystem.out.println(SET); // [カード、ガレノス]
50
51れる / **
52である のMap.Entryの*公共セット<<K 、V >>のentrySet():すべてのオブジェクト(セットコレクション)のためのキーと値のペアのコレクション地図コレクションに取得します。
53は * /
54である のMap.Entryのセット<<文字列、文字列>> SETL = EnumMap.entrySet();
55 System.out.println(SETL); // [カード=未亡人、キャサリン・ガレン=]
56である
57である }
58 }
注:指定したキー(キー)は、コレクション内にない場合は、メソッドのPUTを使用する場合は、キーの値に対応する戻りnullでなく、コレクションに追加は、キー値を指定し、もしコレクション内の指定したキー(キー)本発明は、それが対応するキー値(代替値前の値)が設定されているが返され、その値は指定された新しい値に置き換えられ、指定されたキーに対応します。
値を見つけるために、コレクショントラバーサルキーの道の地図
キーウェイの値を取得:に対応するキーの値を求めることにより、すなわち重要な要素
分析手順:
1.取得のキーは一意であるため、キーは設定のすべてを格納するためのセットに戻りますので、すべてのキーマップ。方法ヒント:キーセット()
トラバーサルキーの2セットのコレクションは、各キーを与えます。
前記キーは、キーに対応する値を取得します。方法ヒント:GET(Kキー)
1 package demosummary.map;
2
3 import java.util.HashMap;
4 import java.util.Set;
5
6 public class MapFor {
7 /**
8 * 键找值方式:即通过元素中的键,获取键所对应的值
9 * 分析步骤:
10 * 1. 获取Map中所有的键,由于键是唯一的,所以返回一个Set集合存储所有的键。方法提示: keyset()
11 * 2. 遍历键的Set集合,得到每一个键。
12 * 3. 根据键,获取键所对应的值。方法提示: get(K key)
13 */
14 public static void main(String[] args) {
15 //创建map集合
16 HashMap<String, String> map = new HashMap<>();
17 //添加元素
18 map.put("蛮王", "艾希");
19 map.put("德玛", "卡特琳娜");
20 map.put("卡牌", "寡妇");
21 //获取键
22 Set<String> keys = map.keySet();
23 //遍历键
24 for (String key : keys) {
25 //通过键获取值
26 String s = map.get(key);
27 System.out.println(s);
28 /**
29 * 运行结果
30 * 寡妇
31 * 卡特琳娜
32 * 艾希
33 */
34 }
35 }
36 }
Entry键值对对象
我们已经知道, Map 中存放的是两种对象,一种称为key(键),一种称为value(值),它们在在 Map 中是一一对应关 系,这一对对象又称做 Map 中的一个 Entry(项) 。 Entry 将键值对的对应关系封装成了对象。即键值对对象,这 样我们在遍历 Map 集合时,就可以从每一个键值对( Entry )对象中获取对应的键与对应的值。
方法:
public K getKey() :获取Entry对象中的键。
public V getValue() :获取Entry对象中的值。
在Map集合中也提供了获取所有Entry对象的方法:
public Set<Map.Entry<K,V>> entrySet() : 获取到Map集合中所有的键值对对象的集合(Set集合)。
操作步骤与图解:
1. 获取Map集合中,所有的键值对(Entry)对象,以Set集合形式返回。方法提示: entrySet() 。
2. 遍历包含键值对(Entry)对象的Set集合,得到每一个键值对(Entry)对象
3. 通过键值对(Entry)对象,获取Entry对象中的键与值。 方法提示: getkey() getValue()
1 package demosummary.map;
2
3 import java.util.HashMap;
4 import java.util.Map;
5 import java.util.Set;
6
7 public class MapEntry {
8 public static void main(String[] args) {
9 //创建map集合
10 HashMap<String, String> map = new HashMap<>();
11 //添加元素
12 map.put("蛮王", "艾希");
13 map.put("德玛", "卡特琳娜");
14 map.put("卡牌", "寡妇");
15 //获取entry对象
16 Set<Map.Entry<String, String>> entrySet = map.entrySet();
17 //遍历得到entry对象
18 for (Map.Entry<String, String> es : entrySet) {
19 String key = es.getKey();
20 String value = es.getValue();
21 System.out.println(key + "的CP是" + value);
22 /**
23 * 执行结果
24 * 卡牌的CP是寡妇
25 * 德玛的CP是卡特琳娜
26 * 蛮王的CP是艾希
27 */
28 }
29 }
30 }
HashMap存储自定义类型键值
1 package demosummary.map;
2
3 import java.util.HashMap;
4 import java.util.Objects;
5 import java.util.Set;
6
7 public class MapStudent {
8 private String name;
9 private Integer age;
10
11 public MapStudent() {
12 }
13
14 public MapStudent(String name, Integer age) {
15 this.name = name;
16 this.age = age;
17 }
18
19 public String getName() {
20 return name;
21 }
22
23 public void setName(String name) {
24 this.name = name;
25 }
26
27 public Integer getAge() {
28 return age;
29 }
30
31 public void setAge(Integer age) {
32 this.age = age;
33 }
34
35 @Override
36 public boolean equals(Object o) {
37 if (this == o) return true;
38 if (o == null || getClass() != o.getClass()) return false;
39 MapStudent that = (MapStudent) o;
40 return Objects.equals(name, that.name) &&
41 Objects.equals(age, that.age);
42 }
43
44 @Override
45 public int hashCode() {
46 return Objects.hash(name, age);
47 }
48
49 @Override
50 public String toString() {
51 return "MapStudent{" +
52 "name='" + name + '\'' +
53 ", age=" + age +
54 '}';
55 }
56
57 public static void main(String[] args) {
58 //创建HashMap集合对象
59 HashMap<MapStudent, String> map = new HashMap<>();
60 //添加元素
61 map.put(new MapStudent("A", 20),"北京");
62 map.put(new MapStudent("B", 21),"上海");
63 map.put(new MapStudent("C", 22),"深圳");
64 map.put(new MapStudent("D", 20),"广州");
65 //获取keySet对象
66 Set<MapStudent> ms = map.keySet();
67 //遍历得到的Key
68 for (MapStudent m : ms) {
69 String s = map.get(m);
70 System.out.println(s);
71 }
72 /**
73 * 执行结果
74 * 广州
75 * 北京
76 * 上海
77 * 深圳
78 */
79 }
80 }
LinkedHashMap
LinkedHashMap可以保证存进去的元素有序,因为在HashMap下面有一个子类LinkedHashMap,它是链表和哈希表组合的一个数据存储结构
1 package demosummary.map;
2
3 import java.util.LinkedHashMap;
4 import java.util.Map;
5 import java.util.Set;
6
7 public class LinkedMapDemo {
8 public static void main(String[] args) {
9 //创建LinkedHashMap集合
10 LinkedHashMap<String, String> map = new LinkedHashMap<>();
11 //添加元素
12 map.put("蛮王", "艾希");
13 map.put("德玛", "卡特琳娜");
14 map.put("卡牌", "寡妇");
15 //获取entrySet对象
16 Set<Map.Entry<String, String>> me = map.entrySet();
17 //遍历获取的键
18 for (Map.Entry<String, String> sse : me) {
19 System.out.println(sse.getKey()+"=="+sse.getValue());
20 }
21 /**
22 * 执行结果
23 * 蛮王==艾希
24 * 德玛==卡特琳娜
25 * 卡牌==寡妇
26 */
27 }
28 }