第5章: Javaの標準ライブラリの活用

5.1 コレクションフレームワーク

Javaのコレクションフレームワークは、データを効率的に管理、保存、および操作するためのツール群です。コレクションは、複数のオブジェクトを一つの単位として管理するために使用されるインターフェースやクラスの集合で、データを格納・取り出し・操作するためのさまざまな手法を提供します。ここでは代表的な ListSet、および Map を紹介します。

5.1.1 List インターフェース

List は順序を持つ要素のコレクションで、同一の要素を複数回格納することができます。一般的な実装クラスには ArrayListLinkedList があります。

  • ArrayList:内部的に配列でデータを管理するリストです。ランダムアクセスが高速で、頻繁に要素を取得したり、インデックスによるアクセスが多い場合に適しています。
  • LinkedList:双方向リストでデータを管理するリストです。挿入や削除のコストが低く、要素の追加や削除が頻繁な場合に適しています。
Listの使用例
import java.util.ArrayList;
import java.util.List;

public class ListExample {
public static void main(String[] args) {
List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
names.add("Charlie");

for (String name : names) {
System.out.println(name);
}
}
}
主な操作方法
  • add(E e): リストに要素を追加
  • get(int index): 指定したインデックスの要素を取得
  • remove(int index): 指定したインデックスの要素を削除
  • size(): リストの要素数を取得

5.1.2 Set インターフェース

Set は重複を許さないコレクションで、順序が保証されない場合が多いです。主な実装クラスには HashSetTreeSet があります。

  • HashSet:ハッシュテーブルを用いた実装で、高速なアクセスが可能です。
  • TreeSet:要素を自然順序またはコンパレータを使用してソートした順序で格納します。
Setの使用例
import java.util.HashSet;
import java.util.Set;

public class SetExample {
public static void main(String[] args) {
Set<String> uniqueNames = new HashSet<>();
uniqueNames.add("Alice");
uniqueNames.add("Bob");
uniqueNames.add("Alice"); // 重複要素は追加されない

for (String name : uniqueNames) {
System.out.println(name);
}
}
}
主な操作方法
  • add(E e): セットに要素を追加
  • contains(Object o): セットに指定した要素が含まれているか確認
  • remove(Object o): セットから指定した要素を削除
  • size(): セットの要素数を取得

5.1.3 Map インターフェース

Map はキーと値のペアでデータを管理し、キーは重複を許さず、一意の値に関連付けられます。主な実装クラスには HashMapTreeMap があります。

  • HashMap:高速なキーの検索を実現するハッシュテーブルによる実装。
  • TreeMap:キーを自然順序またはコンパレータに従ってソートするマップ。
Mapの使用例
import java.util.HashMap;
import java.util.Map;

public class MapExample {
public static void main(String[] args) {
Map<String, Integer> ages = new HashMap<>();
ages.put("Alice", 25);
ages.put("Bob", 30);

System.out.println("Alice's age: " + ages.get("Alice"));
}
}
主な操作方法
  • put(K key, V value): キーと値をマップに追加
  • get(Object key): 指定したキーに関連する値を取得
  • remove(Object key): 指定したキーのペアを削除
  • size(): マップの要素数を取得

5.2 ファイル入出力

Javaでは、ファイルの読み書きやシリアライズを行うための多様な入出力ストリームが用意されています。

5.2.1 ファイルの読み書き

ファイル操作の基本は、FileReaderFileWriter といったクラスを使用することです。また、バイトストリーム(InputStreamOutputStream)やキャラクタストリーム(ReaderWriter)など、多くの種類が存在します。

ファイルの書き込み例
import java.io.FileWriter;
import java.io.IOException;

public class FileWriteExample {
public static void main(String[] args) {
try (FileWriter writer = new FileWriter("example.txt")) {
writer.write("Hello, World!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
ファイルの読み込み例
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class FileReadExample {
public static void main(String[] args) {
try (BufferedReader reader = new BufferedReader(new FileReader("example.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

5.2.2 シリアライズとデシリアライズ

オブジェクトをファイルに保存し、後で再構築するために、Javaではシリアライズ機能が提供されています。Serializable インターフェースを実装し、ObjectOutputStreamObjectInputStream を用います。

シリアライズ例
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class SerializationExample {
public static void main(String[] args) {
try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("data.ser"))) {
out.writeObject(new Person("Alice", 25));
} catch (IOException e) {
e.printStackTrace();
}
}
}
デシリアライズ例
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

public class DeserializationExample {
public static void main(String[] args) {
try (ObjectInputStream in = new ObjectInputStream(new FileInputStream("data.ser"))) {
Person person = (Person) in.readObject();
System.out.println(person);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}

5.3 マルチスレッド

Javaは並行処理をサポートしており、マルチスレッドを使用することで効率的な処理が可能です。マルチスレッドの基本的な方法には Thread クラスを継承する方法と Runnable インターフェースを実装する方法の2つがあります。

5.3.1 スレッドの作成と実行

Threadクラスを継承する方法
public class MyThread extends Thread {
public void run() {
System.out.println("Thread is running");
}

public static void main(String[] args) {
MyThread thread = new MyThread();
thread.start();
}
}
Runnableインターフェースを実装する方法
public class MyRunnable implements Runnable {
public void run() {
System.out.println("Runnable thread is running");
}

public static void main(String[] args) {
Thread thread = new Thread(new MyRunnable());
thread.start();
}
}

5.3.2 同期処理

複数のスレッドが同じリソースにアクセスする場合、データ競合が発生しやすくなります。これを防ぐために、synchronized キーワードを用いてメソッドやブロックを同期化します。

public class Counter {
private int count = 0;

public synchronized void increment() {
count++;
}

public int getCount() {
return count;
}
}

まとめ

この章では、Javaのコレクションフレームワーク、ファイル入出力、そしてマルチスレッドの基本について詳しく解説しました。標準ライブラリを活用することで、プログラムの効率化や拡張が容易になり、より柔軟で強力なアプリケーション開発が可能となります。


初心者におすすめ!プログラミングスクールのススメ

未経験でも気軽に!サブスク型プログラミングスクール【Freeks】

プログラミングを始めたいと思っているそこのあなた、独学よりもプログラミングスクールが断然おすすめです!理由は簡単、続けやすさです。

独学の挫折率、驚きの87.5%!

独学でプログラミングを続けるのは、実はかなりハードルが高いんです。データによると、なんと87.5%もの学習者が途中で挫折しているとか。一方、各プログラミングスクールが公表しているデータによると、受講生の約95%が最後までやり抜いているとのこと。数字を見れば一目瞭然、プログラミングスクールの方が圧倒的に続けやすいんです。

有料と無料、スクールの違いは?

プログラミングスクールには有料と無料のタイプがありますが、その違いは次の通りです:

  • 受講条件が異なる
  • 学べるスキルやカリキュラム内容が異なる
  • 就職や転職のサポート内容が異なる

どちらが自分に合っているか、よく考えて選ぶのが大事です。

サブスク型プログラミングスクール『FREEKS(フリークス)』に注目!

プログラミング初心者でも学びやすいと評判の『FREEKS』、その特徴は以下の通り:

  • 未経験者向けのわかりやすいカリキュラム
  • 経験豊富なエンジニアのサポート
  • オンラインで自分のペースで学習可能

なんと、月会費のみで全カリキュラムが受け放題!Java、PHP、HTML/CSS、JavaScriptなど、多彩なプログラミング言語が学べるんです。しかも、AIが質問に自動で答えてくれるシステムも導入済み。

終了後は副業もサポート!

カリキュラムを終了した後には、Freeks経由で未経験者でも取り組める副業案件の受注が可能。実務を通じてスキルを磨き、市場価値の高いエンジニアへの道が開けます。

独学で悩むくらいなら、まずはプログラミングスクールをチェックしてみるのもアリかもしれませんよ!
 ↓ ↓ こちらをクリック ↓ ↓ 

p-school

Share
Published by
p-school

Recent Posts

第6章: PHPのデータベース操作

PHPを使用してデータベースに…

2週間 ago

第5章: PHPのオブジェクト指向プログラミング(OOP)

オブジェクト指向プログラミング…

2週間 ago

第4章: PHPの関数

プログラミングにおいて、関数は…

2週間 ago

第3章: PHPの配列とコレクション

PHPでの配列とコレクションの…

2週間 ago

第2章: PHPの基本文法

PHPの基本的な構文や使い方を…

2週間 ago