JavaコレクションクラスでMapを使用する方法
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<K,V> newNode(int hash, K key, V value, Node<K,V> next) { return new Node<>(hash, key, value, next); }
それでは、この Node ノードのデータ型は何でしょうか?
ソース コードを見てみましょう: (これは Entry インターフェイスも実装しています)
static class Node<K,V> implements Map.Entry<K,V> { final int hash; // 存放hash值 final K key; // 存放key值 V value; // 存放Value值 Node<K,V> 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
で、次にセットを見てください no2 キーのアドレスはまったく同じです:
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"));
// 取出所有的key,通过key取出对应的value Set keySet = map.keySet(); for (Object o : keySet) { System.out.println(o); System.out.println(map.get(o)); }
// 把所有的value值取出 Collection values = map.values(); for (Object value : values) { System.out.println(value); }
// 通过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 サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4
