JavaコレクションクラスでMapを使用する方法

WBOY
リリース: 2023-05-05 11:43:06
転載
1119 人が閲覧しました

1.Map インターフェイスの概要

Map は、マッピング関係を含むデータを保存するために使用されます: Key - Value

Set の場合、最下層は実際には依然として Map ですが、Set はマップを選択しません。 Value を使用します。つまり、Set の Value 値は常に定数です。

Map の Key と Value は任意のタイプのデータであり、HashMap$Node オブジェクトにカプセル化されます。

Map の Key は繰り返しできませんが、Value は繰り返し可能です同じ Key がある場合、等価性と置換操作

2.Map インターフェースの分析

Map の Key-Valueペアは HashMap$Node

tab[i] = newNode(hash, key, value, null);

--

Node newNode(int hash, K key, V value, Node next) {
    return new Node<>(hash, key, value, next);
}
ログイン後にコピー

それでは、この Node ノードのデータ型は何でしょうか?

ソース コードを見てみましょう: (これは Entry インターフェイスも実装しています)

static class Node implements Map.Entry {
    final int hash;  // 存放hash值
    final K key;  // 存放key值
    V value;  // 存放Value值
    Node next;  // 存放下一个个节点,以形成链表结构
}
ログイン後にコピー

k-v プログラマーの探索を容易にするために、EntrySet コレクションも作成されます。このコレクションに格納されているのは Entry で、Entry オブジェクトには k、v が含まれていますが、基本的に、ここでの k-v 値は引き続き Node ノード内のデータを指します。つまり、ここでの k-v は依然としてアドレス データ

// k-v存在有EntrySet的一个指向
Set set = map.entrySet();
System.out.println(set.getClass());
ログイン後にコピー

を格納します。出力:

class java.util.HashMap$EntrySet

それでは、プログラマのトラバーサルを容易にするこの機能はどのように反映されるのでしょうか?

その理由は、Map.Entry が 2 つの非常に重要なメソッド、K getKey(); V getValue(); を提供しているためです。したがって、次の方法でマップをトラバースできます:

Set set = map.entrySet();
System.out.println(set.getClass());
for (Object obj : set) {
    Map.Entry entry = (Map.Entry) obj;
    System.out.println(entry.getKey());
    System.out.println(entry.getValue());
}
ログイン後にコピー

それでは、Entry に格納されている k-v が単なるアドレスへのポインタであることをどのように証明するのでしょうか。非常に単純な

デバッグを通じて、まずマップに保存されているデータを見てみましょう。no2 キーのアドレスは @727

JavaコレクションクラスでMapを使用する方法

で、次にセットを見てください no2 キーのアドレスはまったく同じです:

JavaコレクションクラスでMapを使用する方法

##3.Map インターフェイス メソッド

コード例:

Map map = new HashMap();
// 添加键值对
map.put("no1","dahe");
map.put("no2","zhangsan");
// Key重复会进行替换
map.put("no1","lisi");
System.out.println(map);

// 根据键删除映射关系
map.remove("no1");
System.out.println(map);
// 根据key得到值
Object no2 = map.get("no2");
System.out.println(no2);
// 获取键值对数量
System.out.println(map.size());
// 判空
System.out.println(map.isEmpty());
// 清空
// map.clear();
// 查找键是否存在
System.out.println(map.containsKey("ok"));
ログイン後にコピー

4.マップトラバーサルメソッド

最初の式: すべてのキーを取り出し、そのキーを通じて対応する値を取得します

// 取出所有的key,通过key取出对应的value
Set keySet = map.keySet();
for (Object o : keySet) {
    System.out.println(o);
    System.out.println(map.get(o));
}
ログイン後にコピー

2 番目の式: すべての値の値を取り出します

// 把所有的value值取出
Collection values = map.values();
for (Object value : values) {
    System.out.println(value);
}
ログイン後にコピー

3 番目の式: EntrySet を使用して k-v

// 通过EntrySet来获取 k-v
Set entrySet1 = map.entrySet();
for (Object o : entrySet1) {
    // 将entry 转成 Map.Entry
    Map.Entry m = (Map.Entry) o;
    System.out.println(m.getKey());
    System.out.println(m.getValue());
}
ログイン後にコピー
を取得します

以上がJavaコレクションクラスでMapを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!