Java LinkedList size() メソッド

Java LinkedList Java LinkedList


size()メソッドは Java ではLinkedListクラスが提供する一般的なメソッドで、それはjava.utiljava.util パッケージに属します。このメソッドの主な役割は、現在のリンクリスト内の要素の数を返すことです。

メソッドの構文:

public int size()

戻り値:

  • 返しますintint 型の値で、リンクリスト内の要素の数を表します。
  • リンクリストが空の場合は 0 を返します。

メソッドの特徴

時間計算量

size()このメソッドの時間計算量は O(1) です。つまり、リンクリストにいくつの要素があっても、サイズを取得する時間は一定です。

これは、LinkedListクラスが内部で変数を維持しているためです。size要素の追加または削除時にはこの変数が自動的に更新され、size()メソッドの呼び出し時には単にこの変数の値を返すだけです。

配列の length との違い

初心者は時々混同することがありますsize()メソッドと配列のlengthプロパティ:

  • 配列のlengthはプロパティであり、配列の容量を表します
  • LinkedListのsize()はメソッドであり、実際に格納されている要素の数を返します

スレッドセーフティ

size()メソッド自体はスレッドセーフではありません。マルチスレッド環境で使用する場合は、追加の同期対策が必要です。


使用例

基本的な使い方

例

import java.util.LinkedList;

public class LinkedListSizeDemo {
    public static void main(String[] args) {
        // LinkedList を作成
        LinkedList<String> fruits = new LinkedList<>();
       
        // 要素を追加
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Orange");
       
        // size() メソッドを使用して要素数を取得
        int size = fruits.size();
        System.out.println("LinkedList の要素数: " + size); // 出力: 3
    }
}

空のリンクリストの場合

例

import java.util.LinkedList;

public class EmptyLinkedListDemo {
    public static void main(String[] args) {
        LinkedList<Integer> numbers = new LinkedList<>();
        System.out.println("空のリンクリストの size: " + numbers.size()); // 出力: 0
    }
}

動的な変化のデモ

例

import java.util.LinkedList;

public class DynamicSizeDemo {
    public static void main(String[] args) {
        LinkedList<Character> letters = new LinkedList<>();
        System.out.println("初期サイズ: " + letters.size()); // 0
       
        letters.add('A');
        letters.add('B');
        System.out.println("2つの要素を追加した後: " + letters.size()); // 2
       
        letters.removeFirst();
        System.out.println("1つの要素を削除した後: " + letters.size()); // 1
       
        letters.clear();
        System.out.println("クリア後: " + letters.size()); // 0
    }
}

よくある質問

size() メソッドは例外をスローしますか?

size()このメソッドは通常、例外をスローしません。リンクリストが null(空のリンクリストではないことに注意)であっても、呼び出しsize()メソッドは例外をスローしませんが、NullPointerException をスローしますNullPointerException。

例

LinkedList<String> list = null;
// 次の行は NullPointerException をスローします
System.out.println(list.size());

size() と isEmpty() の関係

isEmpty()isEmpty() メソッドは、size()size() メソッドに基づいて実装されています:

例

public boolean isEmpty() {
    return size() == 0;
}

したがって、list.isEmpty()と同等ですlist.size() == 0、ただし前者のほうが可読性が優れています。


実際の適用シーン

ループによる走査

例

LinkedList<String> colors = new LinkedList<>();
colors.add("Red");
colors.add("Green");
colors.add("Blue");

for (int i = 0; i < colors.size(); i++) {
    System.out.println(colors.get(i));
}

容量の確認

例

LinkedList<Integer> queue = new LinkedList<>();
// ...要素を追加...

if (queue.size() > 10) {
    System.out.println("キューが満杯のため、これ以上要素を追加できません");
}

他のコレクションとの比較

例

LinkedList<String> list1 = new LinkedList<>();
LinkedList<String> list2 = new LinkedList<>();

// ...2つのリンクリストを埋める...

if (list1.size() == list2.size()) {
    System.out.println("2つのリンクリストのサイズは同じです");
}

パフォーマンスの考慮

ただしsize()メソッド自体は O(1) の時間計算量ですが、場合によっては頻繁に呼び出すとsize()パフォーマンスに影響を与える可能性があります:

  1. マルチスレッド環境:呼び出すたびに、size()メモリ内のsize変数を読み取る必要があります
  2. 複雑なループ条件:例えばfor (int i = 0; i < list.size(); i++)、ループのたびに呼び出されますsize()

2番目のケースについては、次のように最適化できます:

例

int size = list.size();
for (int i = 0; i < size; i++) {
    // ループ本体
}

まとめ

LinkedListのsize()メソッドは単純ですが非常に重要なメソッドであり、リンクリストの現在の要素数をすばやく取得する機能を提供します。このメソッドの動作原理と特徴を理解することは、より効率的で信頼性の高い Java コードを書くのに役立ちます。

覚えておきましょう:

  • size()返すのは要素数であり、容量ではありません
  • 空のリンクリストのsize()0 を返します
  • マルチスレッド環境で使用する場合は同期の問題に注意する必要があります
  • 組み合わせることができますisEmpty()メソッドを使用するとコードがより明確になります

Java LinkedList Java LinkedList

その他の拡張