【Java】連想配列の書き方と使い方の基本
Javaでデータを「キー」と「値」のペアで管理する連想配列の基本を解説します。通常の配列との違いから、連想配列の具体的な書き方や使い方をサンプルコードを交えて学び、効率的なデータ操作の基礎を身につけられます。
開発環境
- OS: Windows10
- Editor: Visual Studio Code
- Java: 22.0.2
Javaの連想配列とは
連想配列とは、データを「キー」と「値」というペアで管理するためのデータ構造です。
通常の配列では、0、1、2といった連続した整数(インデックス番号)を使用して、データが格納されている場所を指定し、そのデータにアクセスします。例えば、data[0] のように指定することで、最初のデータを取り出すことができます。
これに対して連想配列では、インデックス番号ではなく、自由に決めた「キー」を使ってデータにアクセスします。この「キー」には、文字列、数値、またはオブジェクトなど、さまざまな種類のデータを使用することが可能です。
例えば、「商品名」をキーにして「価格」の値を取り出したり、「ユーザーID」をキーにして「ユーザー名」の値を取り出したりできます。このように、データの内容を直接表す分かりやすいキーを使って、必要な情報に効率的にアクセスできるのが、連想配列の大きな特徴です。キーと値が密接に結びついているため、関連するデータを素早く探し出し、利用することが可能になります。
用語
-
キー(key): 配列の要素にアクセスするために使用する一意の名前
- プログラミングでは、たくさんのデータを扱うことがあります。これらのデータの中から特定のデータを見つけ出して利用するために、「キー」というものが使われます。
- キーは、個々のデータに付けられた「名前」や「識別子」のような役割を果たします。この名前を使って、必要なデータに直接アクセスすることができます。
- 特に、キーは同じデータ集合の中では「一意」、つまり他に同じ名前がないことが求められます。もし同じ名前のキーが複数存在すると、どのデータにアクセスしたいのか区別できなくなるためです。
-
値(value): 各キーに関連付けられたデータ
- 「値」は、「キー」に対応して保存されている、具体的なデータ本体のことを指します。
- キーがデータの「見出し」であるならば、値はその「内容」にあたります。
- たとえば、「名前」というキーに対して「田中」という値が関連付けられている場合、「田中」がそのキーに対する具体的なデータです。
- プログラミングでは、キーを指定することで、そのキーに紐づく値を取り出したり、新しい値に置き換えたりすることが可能です。キーと値は常にペアとして扱われます。
サンプルコード
java/chapter07/Rensou.java
このコードは、Javaプログラミング言語を使って、複数の商品注文の合計金額を計算する方法を示しています。システムエンジニアにとって、このようにデータを管理し、計算する処理は基本的な業務の一つです。
まず、コードの最初の部分にあるimport文は、これから使う便利な部品(クラス)をプログラムに読み込むためのものです。ここでは、たくさんのデータを効率的に扱うためのList(リスト)やMap(マップ)といったクラスを読み込んでいます。
Listは、複数のデータを順番に並べて格納する「リスト」のようなものです。Mapは、データに名前(キー)を付けて保存し、その名前でデータを取り出せる「辞書」のようなものです。
次に、public class Rensou { ... }という部分は、このプログラムの本体です。その中のpublic static void main(String[] args) { ... }が、プログラムが開始されるときに一番最初に実行される部分になります。
コードの中を見ていきましょう。
この行では、「注文のリスト」を作成しています。このリストは、Map型のデータを複数格納できます。Map<String, Object>は、「キー(データの名前)が文字列で、値(データ本体)は様々な型(Object)をとれる辞書」という意味です。つまり、一つの注文は「商品名」「数量」「価格」といった情報をまとめた辞書として扱われます。
ここでは、3つの注文データをリストに追加しています。Map.of(...)を使うと、簡単にキーと値のペアを指定してMapを作成できます。例えば最初の注文は、「item」が「A」、「quantity」(数量)が1、「price」(価格)が1000という情報を持っています。
すべての注文の合計金額を計算するために、totalという名前の変数を用意し、初期値として0を設定しています。
この部分が、合計金額を計算する中心的な処理です。
for (Map<String, Object> order : orders)は「拡張forループ」と呼ばれるもので、ordersリストの中にある各注文(Map型のデータ)を一つずつ取り出して処理を行います。取り出された一つ一つの注文データは、orderという変数に格納されます。
int quantity = (int) order.get("quantity");現在のorder(注文データ)から、「quantity」というキーに対応する値を取り出しています。order.get("quantity")は、Object型という最も一般的な型で値を取り出すため、(int)と書いて整数型(int)に変換(キャスト)しています。int price = (int) order.get("price");同様に、現在のorderから「price」というキーに対応する値を取り出し、整数型に変換しています。total += quantity * price;取り出した数量と価格を掛け算し、それを現在のtotalに足し合わせています。+=は、左側の変数に右側の計算結果を足し込む省略記法です。この処理がリストのすべての注文に対して繰り返されることで、全体の合計金額がtotalに蓄積されていきます。
最後に、計算されたtotalの値を画面に出力しています。System.out.println()は、指定した内容を画面に表示するための命令です。文字列と変数を+でつなぐことで、メッセージと計算結果を合わせて表示しています。
このコードを通じて、複数のデータを構造化して管理し、それらを順番に処理して合計を計算するという、プログラミングの基本的な流れとデータ操作を学ぶことができます。
Rensou.java1import java.util.ArrayList; 2import java.util.HashMap; 3import java.util.LinkedHashMap; 4import java.util.List; 5import java.util.Map; 6 7public class Rensou { 8 public static void main(String[] args) { 9 // 注文情報の合計を求める練習問題 10 List<Map<String, Object>> orders = new ArrayList<>(); 11 orders.add(Map.of("item", "A", "quantity", 1, "price", 1000)); 12 orders.add(Map.of("item", "B", "quantity", 2, "price", 500)); 13 orders.add(Map.of("item", "C", "quantity", 3, "price", 800)); 14 15 // 各注文の合計金額を計算し、全体の合計金額を求める 16 int total = 0; 17 for (Map<String, Object> order : orders) { 18 int quantity = (int) order.get("quantity"); 19 int price = (int) order.get("price"); 20 total += quantity * price; 21 } 22 System.out.println("合計金額は" + total + "円です。"); 23 } 24} 25
おわりに
この記事では、Javaにおける連想配列の基本的な考え方と具体的な使い方を学びました。
連想配列は「キー」と「値」のペアでデータを管理する構造であり、インデックス番号ではなく、分かりやすい自由なキーでデータにアクセスできることが特徴です。
Mapとして連想配列を扱い、Map.of()メソッドでキーと値を設定し、get()メソッドでキーを指定して値を取り出す方法を理解できました。
複数の注文データをList<Map<String, Object>>で効率的に管理し、ループ処理で合計金額を計算する実践的なコードを通して、データ操作の基礎を体験できました。
今回習得した連想配列の知識は、システム開発においてデータを柔軟に扱うための重要な土台となるでしょう。