要素の検索

広告

ここではLinkedListに登録されている要素の中から、指定した要素があるかどうかを検索してみます。基本的にArrayListの時と同じです。LinkedListクラスで用意されている"indexOf"メソッドを使います。

リスト内で指定された要素が最初に検出された位置のインデックスを返します。List にこの要素が
ない場合は -1 を返します。つまり、(o==null ? get(i)==null : o.equals(get(i))) となる、最小
のインデックス値 i を返します。そのようなインデックスがない場合は -1 を返します。 

パラメータ:
  o - 検索する要素 
戻り値:
  リスト内で指定された要素が最初に検出された位置のインデックス。リストにこの要素がない場合
    は -1

検索したい要素を引数に指定すると、LinkedListクラスのオブジェクト内に格納されている要素の先頭から検索を行い、最初に見つかった要素のインデックス番号を返してくれます。

また"indexOf"メソッドは先頭から検索しますけれど、最後から検索するための"lastIndexOf"メソッドも用意されています。

リスト内で指定された要素が最後に検出された位置のインデックスを返します。リストにこの要素が
ない場合は -1 を返します。つまり、(o==null ? get(i)==null : o.equals(get(i))) となる、最大
のインデックス値 i を返します。そのようなインデックスがない場合は -1 を返します。 

パラメータ:
  o - 検索する要素 
戻り値:
  リスト内で指定された要素が最後に検出された位置のインデックス。リストにこの要素がない場合
    は -1

削除したい要素のインデックス番号を指定して要素を削除します。削除された要素の後に格納されていた要素は、自動的にインデックス番号は1ずつ減ります。(ArrayListと異なり要素の再配置は行われないため、比較的高速に行われます)。

使い方としては下記のような感じとなります。

LinkedList<String> array = new LinkedList<String>();

array.add("日本");
array.add("ブラジル");
array.add("日本");
array.add("イングランド");

System.out.println(array.indexOf("日本"));      // 0
System.out.println(array.lastIndexOf("東京"));  // 2

サンプルプログラム

では実際に試してみます。

collectionTest8

import java.util.LinkedList;

class collectionTest8{
  public static void main(String args[]){
    LinkedList<String> array = new LinkedList<String>();

    array.add("日本");
    array.add("ブラジル");
    array.add("日本");
    array.add("イングランド");

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

    String word = "日本";
    int first = array.indexOf(word);

    System.out.println(word + "について検索します");

    if (first != -1){
      System.out.println("最初のインデックス番号は " + first);
    }

    int last = array.lastIndexOf(word);
    if (last != -1){
      System.out.println("最後のインデックス番号は " + last);
    }
  }
}

上記をコンパイルして実際に実行してみると下記のようになります。

p3

( Written by Tatsuo Ikura )