Java
 Computer >> コンピューター >  >> プログラミング >> Java

Java 9のJShellでHashMap・LinkedHashMap・TreeMapを実装する方法

JShellJava 9で導入されたコマンドライン型の対話ツールです。REPL(Read-Eval-Print Loop)とも呼ばれ、入力した文をその場で評価・実行し、結果を即座に出力できるのが特徴です。

Mapインターフェースは、要素をキー/値(key/value)のペア形式で管理するコレクションを実装するための契約を定義します。このMapインターフェースを実装する代表的なJavaコレクションクラスが、HashMapLinkedHashMapTreeMapの3つです。

それぞれのクラスは要素の格納順序に関して異なる特性を持っています。以下、JShellを使った具体的なコード例で確認していきましょう。

1. HashMap:順序は保証されない

以下のコードでは、HashMapの要素が挿入順にもキーのソート順にもならず、予測できない順序で格納される様子がわかります。

jshell> HashMap<String, Integer> hashMap = new HashMap<>();
hashMap ==> {}

jshell> hashMap.put("Adithya", 101);
$2 ==> null

jshell> hashMap.put("Jai", 102);
$3 ==> null

jshell> hashMap.put("Chaitanya", 103);
$4 ==> null

jshell> hashMap.put("Ravi", 104);
$5 ==> null

jshell> hashMap
hashMap ==> {Chaitanya=103, Jai=102, Ravi=104, Adithya=101}

2. LinkedHashMap:挿入順が保持される

次のコードでは、LinkedHashMapの要素が挿入した順序どおりに保存されていることが確認できます。

jshell> LinkedHashMap<String, Integer> linkedHashMap = new LinkedHashMap<>();
linkedHashMap ==> {}

jshell> linkedHashMap.put("Raja", 101);
$8 ==> null

jshell> linkedHashMap.put("Adithya", 102);
$9 ==> null

jshell> linkedHashMap.put("Surya", 103);
$10 ==> null

jshell> linkedHashMap.put("Vamsi", 104);
$11 ==> null

jshell> linkedHashMap
linkedHashMap ==> {Raja=101, Adithya=102, Surya=103, Vamsi=104}

3. TreeMap:キーの自然なソート順で保持される

最後のコードでは、TreeMapの要素がキーの自然なソート順(昇順)で自動的に並べ替えられて格納されることがわかります。

jshell> TreeMap<String, Integer> treeMap = new TreeMap<>();
treeMap ==> {}

jshell> treeMap.put("Raj", 101);
$14 ==> null

jshell> treeMap.put("Pavan", 102);
$15 ==> null

jshell> treeMap.put("Arjun", 103);
$16 ==> null

jshell> treeMap.put("Manoj", 104);
$17 ==> null

jshell> treeMap
treeMap ==> {Arjun=103, Manoj=104, Pavan=102, Raj=101}

まとめ

  • HashMap:要素の順序は一切保証されない(高速な検索・更新が可能)
  • LinkedHashMap:要素を挿入順に保持する
  • TreeMap:キーに基づく自然なソート順で要素を保持する

JShellを活用すれば、このようなMap実装クラスごとの動作の違いを、コンパイルやクラス作成なしに手軽に試すことができます。用途に応じて適切な実装クラスを選択しましょう。

  1. Java 9でJavaFXを使ってJShellをプログラムから実装する方法

    JShellは、サンプル式を対話的に実行できるツールです。通常はコマンドラインから利用しますが、JavaFXアプリケーションの中でプログラム的にJShellを実装することも可能です。その場合、Javaプログラムに以下のパッケージをインポートする必要があります。import jdk.jshell.JShell; import jdk.jshell.SnippetEvent; import jdk.jshell.VarSnippet;これらのクラスの役割は次のとおりです。JShell:評価エンジンの本体。式や文を評価(eval)するためのAPIを提供します。SnippetEvent:評価結果として

  2. Java 9のJShellでスニペットを保存・編集・削除する方法

    Java Shell、通称JShellは、Java 9で正式に導入された公式のREPL(Read-Evaluate-Print-Loop)ツールです。対話型シェルを提供し、main()メソッドを作成したり、コードを実行前にコンパイルしたりすることなく、迅速なプロトタイピングやデバッグを行うことができます。JShellは、コマンドプロンプトで「jshell」と入力するだけで簡単に起動できます。この記事では、JShellで作成したスニペット(コード断片)を保存、編集、削除する方法を解説します。スニペットを保存する(/save)スニペットのソースコードをファイルに保存するには、「/save [-al