Javaのコレクションフレームワークは、データを効率的に管理、操作するための強力なツールセットを提供します。このフレームワークの主要なインターフェースには、List、Set、およびMapがあります。これらは、異なるデータ構造を提供し、異なる要件に対応するために使用されます。本記事では、それぞれのコレクションの使い方と特徴を解説し、実際のコード例を通じて理解を深めます。
Listの概要と使用例
Listは、順序を保持するコレクションで、重複する要素を許容します。主な実装クラスには、ArrayList
やLinkedList
があります。Listを使うと、要素のインデックスによるアクセスや、挿入・削除が簡単に行えます。
ArrayListの使用例
ArrayList
は、サイズが可変の配列として機能し、要素の追加や削除が容易です。以下の例では、ArrayList
を使って文字列を管理し、その内容を出力しています。
import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List fruits = new ArrayList<>(); fruits.add("Apple"); fruits.add("Banana"); fruits.add("Orange"); // 要素を出力 for (String fruit : fruits) { System.out.println(fruit); } // 結果: // Apple // Banana // Orange } }
ArrayList
は、配列と同様にインデックスによるアクセスが可能ですが、要素数が動的に変化します。上記のコードでは、fruits
というリストに3つの要素を追加し、それらを順に出力しています。
LinkedListの使用例
LinkedList
は、双方向リストとして機能し、特定の位置への要素の挿入や削除が効率的に行えます。以下のコードは、LinkedList
を使った例です。
import java.util.LinkedList; import java.util.List; public class Main { public static void main(String[] args) { List animals = new LinkedList<>(); animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); animals.remove("Cat"); for (String animal : animals) { System.out.println(animal); } // 結果: // Dog // Horse } }
この例では、リストから「Cat」を削除した後、残りの要素を出力しています。LinkedList
は特に、頻繁に要素の挿入や削除を行う場合に優れた性能を発揮します。
Setの概要と使用例
Setは、重複しない要素を保持するコレクションです。順序を保証しない場合が多く、ユニークな要素の集合を管理するのに適しています。主な実装クラスにはHashSet
、LinkedHashSet
、TreeSet
があります。
HashSetの使用例
HashSet
は、順序を保持せず、重複する要素を許容しないセットです。以下の例では、整数を管理し、重複が無視される様子を確認できます。
import java.util.HashSet; import java.util.Set; public class Main { public static void main(String[] args) { Set numbers = new HashSet<>(); numbers.add(1); numbers.add(2); numbers.add(3); numbers.add(2); // 重複は無視される for (Integer number : numbers) { System.out.println(number); } // 結果: // 1 // 2 // 3 } }
このコードでは、HashSet
に重複する値「2」を追加していますが、出力結果には1つしか表示されません。HashSet
は、重複を自動的に排除します。
LinkedHashSetの使用例
LinkedHashSet
は、挿入順序を保持するHashSet
の一種です。順序が重要な場合に使用します。以下の例では、挿入した順序で要素が出力されます。
import java.util.LinkedHashSet; import java.util.Set; public class Main { public static void main(String[] args) { Set cities = new LinkedHashSet<>(); cities.add("Tokyo"); cities.add("Osaka"); cities.add("Kyoto"); for (String city : cities) { System.out.println(city); } // 結果: // Tokyo // Osaka // Kyoto } }
LinkedHashSet
は、要素を挿入した順序で保持するため、順序が重要な場合に便利です。ここでは、挿入順序通りに都市名が出力されています。
Mapの概要と使用例
Mapは、キーと値のペアでデータを保持するコレクションです。重複するキーは許されず、各キーに対して1つの値が対応します。主な実装クラスにはHashMap
、LinkedHashMap
、TreeMap
があります。
HashMapの使用例
HashMap
は、キーと値のペアを無順序で管理します。キーはユニークでなければならず、値には重複が許可されます。以下の例では、キーと値のペアを使用して、異なる人物の年齢を管理しています。
import java.util.HashMap; import java.util.Map; public class Main { public static void main(String[] args) { Map<String, Integer> people = new HashMap<>(); people.put("Alice", 30); people.put("Bob", 25); people.put("Charlie", 35); for (Map.Entry<String, Integer> entry : people.entrySet()) { System.out.println(entry.getKey() + " is " + entry.getValue() + " years old."); } // 結果: // Alice is 30 years old. // Bob is 25 years old. // Charlie is 35 years old. } }
HashMap
を使うと、キーと値のペアを簡単に管理できます。この例では、各人の名前をキーとして、その年齢を値として保持しています。entrySet()
を使って、各エントリを繰り返し処理しています。
LinkedHashMapの使用例
LinkedHashMap
は、キーと値のペアを挿入順に管理します。順序を保持しながら、HashMap
のすべての機能を活用できます。
import java.util.LinkedHashMap; import java.util.Map; public class Main { public static void main(String[] args) { Map<String, Integer> people = new LinkedHashMap<>(); people.put("Alice", 30); people.put("Bob", 25); people.put("Charlie", 35); for (Map.Entry<String, Integer> entry : people.entrySet()) { System.out.println(entry.getKey() + " is " + entry.getValue() + " years old."); } // 結果: // Alice is 30 years old. // Bob is 25 years old. // Charlie is 35 years old. } }
この例では、LinkedHashMap
を使って要素の順序を保持しつつ、キーと値のペアを操作しています。挿入された順序で出力されていることが確認できます。
TreeMapの使用例
TreeMap
は、キーに基づいて要素を自然順序または指定された順序で並べ替えて保持します。キーを昇順に整列させたい場合に便利です。
import java.util.Map; import java.util.TreeMap; public class Main { public static void main(String[] args) { Map<String, Integer> people = new TreeMap<>(); people.put("Charlie", 35); people.put("Alice", 30); people.put("Bob", 25); for (Map.Entry<String, Integer> entry : people.entrySet()) { System.out.println(entry.getKey() + " is " + entry.getValue() + " years old."); } // 結果: // Alice is 30 years old. // Bob is 25 years old. // Charlie is 35 years old. } }
TreeMap
は、キーを昇順に並べ替えるため、結果の順序が自動的に整列されます。この例では、名前がアルファベット順に並び替えられています。
まとめ
Javaのコレクションフレームワークは、データを効率的に管理し、さまざまなユースケースに対応するための多様なデータ構造を提供します。Listは順序を保持し、Setは重複を排除し、Mapはキーと値のペアでデータを管理します。これらのコレクションを適切に選択し、使用することで、プログラムの効率性と可読性を大幅に向上させることができます。具体的な実装例を通じて、各コレクションの特徴と使用方法を理解できたかと思います。次のプロジェクトでこれらのコレクションを活用してみましょう。