logo

Java のリスト インターフェイスと例

Java の List インターフェイスは、順序付けられたコレクションを保存する方法を提供します。の子インターフェースです コレクション 。これは、重複した値を格納できる、順序付けられたオブジェクトのコレクションです。 List は挿入順序を保持するため、位置へのアクセスと要素の挿入が可能になります。

目次

Javaのリストインターフェース

List インターフェイスは java.util パッケージにあり、Collection インターフェイスを継承します。 ListIterator インターフェースのファクトリーです。 ListIterator を介して、リストを順方向と逆方向に反復できます。 List インターフェイスの実装クラスは、ArrayList、LinkedList、Stack、および Vector です。 ArrayList と LinkedList は Java プログラミングで広く使用されています。 Vector クラスは Java 5 以降非推奨になりました。



Java Collection FrameworkのListとArrayList

Javaリストインターフェースの宣言

public interface List extends Collection ;>

List クラスでのオブジェクトまたはインスタンスの作成について詳しく説明します。 以来 リスト です インターフェース 、タイプ リストのオブジェクトは作成できません。これを実装するクラスが常に必要です リスト オブジェクトを作成するために。また、導入後は、 ジェネリック Java 1.5 では、List に格納できるオブジェクトの種類を制限することができます。ユーザー定義の「クラス」によって実装される他のいくつかのユーザー定義の「インターフェース」と同様に、 リスト によって実装される「インターフェイス」です。 配列リスト で事前定義されたクラス java.util パッケージ。

Javaリストの構文

このタイプのセーフリストは次のように定義できます。

List list = new ArrayList ();>

注記: Obj は List に格納されるオブジェクトのタイプです

Javaリストの例

ジャワ




// Java program to Demonstrate List Interface> > // Importing all utility classes> import> java.util.*;> > // Main class> // ListDemo class> class> GFG {> > >// Main driver method> >public> static> void> main(String[] args)> >{> > >// Creating an object of List interface> >// implemented by the ArrayList class> >List l1 =>new> ArrayList();> > >// Adding elements to object of List interface> >// Custom inputs> > >l1.add(>0>,>1>);> >l1.add(>1>,>2>);> > >// Print the elements inside the object> >System.out.println(l1);> > >// Now creating another object of the List> >// interface implemented ArrayList class> >// Declaring object of integer type> >List l2 =>new> ArrayList();> > >// Again adding elements to object of List interface> >// Custom inputs> >l2.add(>1>);> >l2.add(>2>);> >l2.add(>3>);> > >// Will add list l2 from 1 index> >l1.addAll(>1>, l2);> > >System.out.println(l1);> > >// Removes element from index 1> >l1.remove(>1>);> > >// Printing the updated List 1> >System.out.println(l1);> > >// Prints element at index 3 in list 1> >// using get() method> >System.out.println(l1.get(>3>));> > >// Replace 0th element with 5> >// in List 1> >l1.set(>0>,>5>);> > >// Again printing the updated List 1> >System.out.println(l1);> >}> }>

>

>

出力

[1, 2] [1, 1, 2, 3, 2] [1, 2, 3, 2] 2 [5, 2, 3, 2]>

ここで、リスト インターフェイスをよりよく理解するために、リスト インターフェイスを使用してさまざまな操作を実行してみましょう。以下にリストされている操作について説明し、その後、クリーンな Java コードを使用してそれらを実装する方法について説明します。

Java リスト インターフェイスでの操作

List はインターフェースであるため、このインターフェースを実装したクラスでのみ使用できます。次に、リストに対してよく使用されるいくつかの操作を実行する方法を見てみましょう。

  • 操作 1: add() メソッドを使用して List クラスに要素を追加する
  • 操作 2: set() メソッドを使用して List クラスの要素を更新する
  • 操作 3: IndexOf()、lastIndexOf メソッドを使用した要素の検索
  • 操作 4: Remove() メソッドを使用して要素を削除する
  • 操作 5: get() メソッドを使用して List クラスの要素にアクセスする
  • 操作 6: contains() メソッドを使用して要素が List クラスに存在するかどうかを確認する

次に、操作を個別に説明し、同じことをコードに実装して、操作をよりよく理解しましょう。

1. を使用して List クラスに要素を追加する add() メソッド

リストに要素を追加するには、 追加() 方法。このメソッドは、さまざまなパラメーターに基づいて複数の操作を実行するためにオーバーロードされます。

パラメーター: これには 2 つのパラメータが必要です。

  • 追加(オブジェクト): このメソッドは、リストの最後に要素を追加するために使用されます。
  • add(int インデックス, オブジェクト): このメソッドは、リスト内の特定のインデックスに要素を追加するために使用されます。

例:

ジャワ

: Javaで




// Java Program to Add Elements to a List> > // Importing all utility classes> import> java.util.*;> > // Main class> class> GFG {> > >// Main driver method> >public> static> void> main(String args[])> >{> >// Creating an object of List interface,> >// implemented by ArrayList class> >List al =>new> ArrayList();> > >// Adding elements to object of List interface> >// Custom elements> >al.add(>'Geeks'>);> >al.add(>'Geeks'>);> >al.add(>1>,>'For'>);> > >// Print all the elements inside the> >// List interface object> >System.out.println(al);> >}> }>

>

>

出力

[Geeks, For, Geeks]>

2. 要素の更新

要素を追加した後、要素を変更したい場合は、 セット() 方法。 List にはインデックスが付いているので、変更したい要素は要素のインデックスによって参照されます。したがって、このメソッドはインデックスと、そのインデックスに挿入する必要がある更新された要素を受け取ります。

例:

ジャワ




// Java Program to Update Elements in a List> > // Importing utility classes> import> java.util.*;> > // Main class> class> GFG {> > >// Main driver method> >public> static> void> main(String args[])> >{> >// Creating an object of List interface> >List al =>new> ArrayList();> > >// Adding elements to object of List class> >al.add(>'Geeks'>);> >al.add(>'Geeks'>);> >al.add(>1>,>'Geeks'>);> > >// Display theinitial elements in List> >System.out.println(>'Initial ArrayList '> + al);> > >// Setting (updating) element at 1st index> >// using set() method> >al.set(>1>,>'For'>);> > >// Print and display the updated List> >System.out.println(>'Updated ArrayList '> + al);> >}> }>

>

挿入ソート
>

出力

Initial ArrayList [Geeks, Geeks, Geeks] Updated ArrayList [Geeks, For, Geeks]>

3. 要素の検索

List インターフェイスでの要素の検索は、Java プログラミングの一般的な操作です。 List インターフェイスには、要素を検索するためのメソッドがいくつか用意されています。 の指標() lastIndexOf() メソッド。

IndexOf() メソッドは、リスト内で指定された要素が最初に出現したインデックスを返します。一方、lastIndexOf() メソッドは、指定された要素が最後に出現したインデックスを返します。

パラメーター:

  • IndexOf(要素): リスト内で指定された要素が最初に出現するインデックスを返します。要素が見つからない場合は -1 を返します。
  • lastIndexOf(要素): リスト内で指定された要素が最後に出現したインデックスを返します。要素が見つからない場合は -1 を返します。

例:

ジャワ




import> java.util.ArrayList;> import> java.util.List;> > public> class> ListExample {> >public> static> void> main(String[] args)> >{> >// create a list of integers> >List numbers =>new> ArrayList();> > >// add some integers to the list> >numbers.add(>1>);> >numbers.add(>2>);> >numbers.add(>3>);> >numbers.add(>2>);> > >// use indexOf() to find the first occurrence of an> >// element in the list> >int> index = numbers.indexOf(>2>);> >System.out.println(> >'The first occurrence of 2 is at index '> >+ index);> > >// use lastIndexOf() to find the last occurrence of> >// an element in the list> >int> lastIndex = numbers.lastIndexOf(>2>);> >System.out.println(> >'The last occurrence of 2 is at index '> >+ lastIndex);> >}> }>

>

>

出力

The first occurrence of 2 is at index 1 The last occurrence of 2 is at index 3>

4. 要素の削除

リストから要素を削除するには、 取り除く() 方法。このメソッドは、さまざまなパラメーターに基づいて複数の操作を実行するためにオーバーロードされます。彼らです:

パラメーター:

  • 削除(オブジェクト): このメソッドは、リストからオブジェクトを単純に削除するために使用されます。このようなオブジェクトが複数ある場合は、最初に出現したオブジェクトが削除されます。
  • 削除(intインデックス): リストにはインデックスが付けられているため、このメソッドは整数値を受け取り、リスト内の特定のインデックスに存在する要素を単純に削除します。要素を削除した後、すべての要素が左側に移動されてスペースが埋められ、オブジェクトのインデックスが更新されます。

例:

ジャワ




// Java Program to Remove Elements from a List> > // Importing List and ArrayList classes> // from java.util package> import> java.util.ArrayList;> import> java.util.List;> > // Main class> class> GFG {> > >// Main driver method> >public> static> void> main(String args[])> >{> > >// Creating List class object> >List al =>new> ArrayList();> > >// Adding elements to the object> >// Custom inputs> >al.add(>'Geeks'>);> >al.add(>'Geeks'>);> > >// Adding For at 1st indexes> >al.add(>1>,>'For'>);> > >// Print the initialArrayList> >System.out.println(>'Initial ArrayList '> + al);> > >// Now remove element from the above list> >// present at 1st index> >al.remove(>1>);> > >// Print the List after removal of element> >System.out.println(>'After the Index Removal '> + al);> > >// Now remove the current object from the updated> >// List> >al.remove(>'Geeks'>);> > >// Finally print the updated List now> >System.out.println(>'After the Object Removal '> >+ al);> >}> }>

>

>

出力

Initial ArrayList [Geeks, For, Geeks] After the Index Removal [Geeks, Geeks] After the Object Removal [Geeks]>

5. 要素へのアクセス

リスト内の要素にアクセスするには、 得る() 指定されたインデックスにある要素を返すメソッド

パラメーター:

get(int index): このメソッドは、リスト内の指定されたインデックスにある要素を返します。

例:

ジャワ




モデルの例

// Java Program to Access Elements of a List> > // Importing all utility classes> import> java.util.*;> > // Main class> class> GFG {> >// Main driver method> >public> static> void> main(String args[])> >{> >// Creating an object of List interface,> >// implemented by ArrayList class> >List al =>new> ArrayList();> > >// Adding elements to object of List interface> >al.add(>'Geeks'>);> >al.add(>'For'>);> >al.add(>'Geeks'>);> > >// Accessing elements using get() method> >String first = al.get(>0>);> >String second = al.get(>1>);> >String third = al.get(>2>);> > >// Printing all the elements inside the> >// List interface object> >System.out.println(first);> >System.out.println(second);> >System.out.println(third);> >System.out.println(al);> >}> }>

>

>

出力

Geeks For Geeks [Geeks, For, Geeks]>

6. リストに要素が存在するかどうかを確認する

要素がリストに存在するかどうかを確認するには、 を含む() 方法。このメソッドは、指定された要素がリストに存在する場合は true を返し、それ以外の場合は false を返します。

パラメーター:

contains(Object): このメソッドは 1 つのパラメータ、つまりリストに存在するかどうかをチェックするオブジェクトを受け取ります。

例:

ジャワ




// Java Program to Check if an Element is Present in a List> > // Importing all utility classes> import> java.util.*;> > // Main class> class> GFG {> >// Main driver method> >public> static> void> main(String args[])> >{> >// Creating an object of List interface,> >// implemented by ArrayList class> >List al =>new> ArrayList();> > >// Adding elements to object of List interface> >al.add(>'Geeks'>);> >al.add(>'For'>);> >al.add(>'Geeks'>);> > >// Checking if element is present using contains()> >// method> >boolean> isPresent = al.contains(>'Geeks'>);> > >// Printing the result> >System.out.println(>'Is Geeks present in the list? '> >+ isPresent);> >}> }>

>

>

出力

Is Geeks present in the list? true>

Javaのリストインターフェースの複雑さ

手術

時間計算量

空間の複雑さ

リストインターフェイスへの要素の追加

○(1)

○(1)

リストインターフェイスから要素を削除

の上)

の上)

リストインターフェイスの要素を置換

の上)

の上)

リストインターフェイスのトラバース

の上)

の上)

Java のリスト インターフェイスの反復処理

これまでは入力サイズが非常に小さく、すべてのエンティティに対して手動で操作を行っていました。次に、リストを反復処理して、より大きなサンプル セットに対して機能させるさまざまな方法について説明します。

方法: リストを反復処理するには複数の方法があります。最も有名な方法は、基本的な方法を使用することです。 for ループ と組み合わせて get() メソッド 特定のインデックスにある要素を取得し、 ループ用に高度な

例:

ジャワ




// Java program to Iterate the Elements> // in an ArrayList> > // Importing java utility classes> import> java.util.*;> > // Main class> public> class> GFG {> > >// main driver method> >public> static> void> main(String args[])> >{> >// Creating an empty Arraylist of string type> >List al =>new> ArrayList();> > >// Adding elements to above object of ArrayList> >al.add(>'Geeks'>);> >al.add(>'Geeks'>);> > >// Adding element at specified position> >// inside list object> >al.add(>1>,>'For'>);> > >// Using for loop for iteration> >for> (>int> i =>0>; i // Using get() method to // access particular element System.out.print(al.get(i) + ' '); } // New line for better readability System.out.println(); // Using for-each loop for iteration for (String str : al) // Printing all the elements // which was inside object System.out.print(str + ' '); } }>

>

>

出力

Geeks For Geeks Geeks For Geeks>

リストインターフェイスのメソッド

さまざまな種類のリストの背後にある主な概念は同じであるため、リスト インターフェイスには次のメソッドが含まれています。

方法

説明

add(int インデックス, 要素) このメソッドは、リスト内の特定のインデックスに要素を追加するために Java List Interface で使用されます。単一のパラメータが渡されると、その要素がリストの最後に追加されるだけです。
addAll(int インデックス, Collection コレクション) このメソッドは、指定されたコレクション内のすべての要素をリストに追加するために Java のリスト インターフェイスで使用されます。単一のパラメーターが渡されると、指定されたコレクションのすべての要素がリストの最後に追加されます。
サイズ() このメソッドは Java リスト インターフェイスで使用され、リストのサイズを返します。
クリア() このメソッドは、リスト内のすべての要素を削除するために使用されます。ただし、作成したリストの参照は引き続き保存されます。
削除(int インデックス) このメソッドは、指定されたインデックスから要素を削除します。後続の要素 (存在する場合) を左にシフトし、それらのインデックスを 1 ずつ減らします。
削除(要素) このメソッドは、リスト内の指定された要素の最初の出現を削除するために Java List Interface で使用されます。
get(int インデックス) このメソッドは、指定されたインデックスにある要素を返します。
set(int インデックス, 要素) このメソッドは、指定されたインデックスの要素を新しい要素に置き換えます。この関数は、新しい要素に置き換えられたばかりの要素を返します。
IndexOf(要素) このメソッドは、指定された要素の最初の出現を返します。または -1 要素がリストに存在しない場合。
lastIndexOf(要素) このメソッドは、指定された要素の最後の出現を返します。または -1 要素がリストに存在しない場合。
等しい(要素) このメソッドは、指定された要素とリストの要素が等しいかどうかを比較するために Java List Interface で使用されます。
ハッシュコード() このメソッドは、指定されたリストのハッシュコード値を返すために Java のリスト インターフェイスで使用されます。
isEmpty() このメソッドは、リストが空かどうかを確認するために Java List Interface で使用されます。リストが空の場合は true を返し、それ以外の場合は false を返します。
含む(要素) このメソッドは、リストに指定された要素が含まれているかどうかを確認するために Java のリスト インターフェイスで使用されます。リストに要素が含まれている場合は true を返します。
containsAll(コレクションコレクション) このメソッドは、リストに要素のすべてのコレクションが含まれているかどうかを確認するために Java List Interface で使用されます。
ソート(コンパレータ比較) このメソッドは、指定された基準に基づいてリストの要素を並べ替えるために、Java のリスト インターフェイスで使用されます。 コンパレータ

Java リストとセット

List インターフェイスと Set インターフェイスは両方とも Collection インターフェイスを継承します。ただし、それらの間にはいくつかの違いがあります。

リスト

セット

リストは順序付けられたシーケンスです。 Set は順序のないシーケンスです。
リストでは重複要素が許可されます Set では要素の重複は許可されません。
位置に応じて要素にアクセスできます。 要素への位置アクセスは許可されていません。
複数の null 要素を格納できます。 null 要素は 1 回だけ格納できます。
リストの実装は ArrayList、LinkedList、Vector、Stack です セットの実装は HashSet、LinkedHashSet です。

Java リスト インターフェイスとのクラスの関連付け

次に、List インターフェイスを実装するクラスについて説明します。List インターフェイスをよりよく理解するために、最初に以下の図を参照してください。それは次のとおりです。

抽象リスト CopyOnWriteArrayList 、 そしてその 抽象シーケンシャルリスト は、List インターフェイスを実装するクラスです。前述の各クラスには個別の機能が実装されています。それらは次のとおりです。

  1. 要約リスト: このクラスは、変更不可能なリストを実装するために使用されます。このリストについては、この AbstractList クラスを拡張し、 得る() そしてその サイズ() メソッド。
  2. CopyOnWriteArrayList: このクラスはリスト インターフェイスを実装します。の強化版です 配列リスト すべての変更 (追加、設定、削除など) は、リストの新しいコピーを作成することによって実装されます。
  3. AbstractSequentialList: このクラスは、 コレクションインターフェース そして AbstractCollection クラス。このクラスは、変更不可能なリストを実装するために使用されます。このリストについては、この AbstractList クラスを拡張し、 得る() そしてその サイズ() メソッド。

このような流れで進めていきます。

  • 配列リスト
  • ベクター
  • スタック
  • リンクリスト

これらを順番に説明し、同じことを実装して、List インターフェイスを使用したクラスの動作を理解しましょう。

1. 配列リスト

配列リスト コレクション フレームワークに実装されたクラスは、Java の動的配列を提供します。ただし、標準の配列よりも遅い場合がありますが、配列内で大量の操作が必要なプログラムでは役立ちます。このクラスを使用してリスト オブジェクトを作成する方法を見てみましょう。

例:

ジャワ




// Java program to demonstrate the> // creation of list object using the> // ArrayList class> > import> java.io.*;> import> java.util.*;> > class> GFG {> >public> static> void> main(String[] args)> >{> >// Size of ArrayList> >int> n =>5>;> > >// Declaring the List with initial size n> >List arrli =>new> ArrayList(n);> > >// Appending the new elements> >// at the end of the list> >for> (>int> i =>1>; i <= n; i++)> >arrli.add(i);> > >// Printing elements> >System.out.println(arrli);> > >// Remove element at index 3> >arrli.remove(>3>);> > >// Displaying the list after deletion> >System.out.println(arrli);> > >// Printing elements one by one> >for> (>int> i =>0>; i System.out.print(arrli.get(i) + ' '); } }>

の Java インデックス

>

>

出力

[1, 2, 3, 4, 5] [1, 2, 3, 5] 1 2 3 5>

2.ベクトル

Vector は、オブジェクトの拡張可能な配列を実装するコレクション フレームワークに実装されるクラスです。 Vector は動的配列を実装しているため、必要に応じて拡大または縮小できます。配列と同様に、整数インデックスを使用してアクセスできるコンポーネントが含まれています。ベクターは基本的にレガシー クラスに分類されますが、コレクションと完全に互換性があるようになりました。このクラスを使用してリスト オブジェクトを作成する方法を見てみましょう。

例:

ジャワ




// Java program to demonstrate the> // creation of list object using the> // Vector class> > import> java.io.*;> import> java.util.*;> > class> GFG {> >public> static> void> main(String[] args)> >{> >// Size of the vector> >int> n =>5>;> > >// Declaring the List with initial size n> >List v =>new> Vector(n);> > >// Appending the new elements> >// at the end of the list> >for> (>int> i =>1>; i <= n; i++)> >v.add(i);> > >// Printing elements> >System.out.println(v);> > >// Remove element at index 3> >v.remove(>3>);> > >// Displaying the list after deletion> >System.out.println(v);> > >// Printing elements one by one> >for> (>int> i =>0>; i System.out.print(v.get(i) + ' '); } }>

>

>

出力

[1, 2, 3, 4, 5] [1, 2, 3, 5] 1 2 3 5>

3. 積み重ねる

Stack は、コレクション フレームワークに実装されるクラスであり、ベクター クラス モデルを拡張し、 例:

ジャワ

例:

int から文字列 Java へ

ジャワ




// Java program to demonstrate the> // creation of list object using the> // Stack class> > import> java.io.*;> import> java.util.*;> > class> GFG {> >public> static> void> main(String[] args)> >{> >// Size of the stack> >int> n =>5>;> > >// Declaring the List> >List s =>new> Stack();> > >// Appending the new elements> >// at the end of the list> >for> (>int> i =>1>; i <= n; i++)> >s.add(i);> > >// Printing elements> >System.out.println(s);> > >// Remove element at index 3> >s.remove(>3>);> > >// Displaying the list after deletion> >System.out.println(s);> > >// Printing elements one by one> >for> (>int> i =>0>; i System.out.print(s.get(i) + ' '); } }>

>

>

出力

[1, 2, 3, 4, 5] [1, 2, 3, 5] 1 2 3 5>

4. リンクリスト

例:

ジャワ

LinkedList は、コレクション フレームワークに実装されるクラスであり、本質的に 例:

ジャワ

例:

ジャワ




// Java program to demonstrate the> // creation of list object using the> // LinkedList class> > import> java.io.*;> import> java.util.*;> > class> GFG {> >public> static> void> main(String[] args)> >{> >// Size of the LinkedList> >int> n =>5>;> > >// Declaring the List with initial size n> >List ll =>new> LinkedList();> > >// Appending the new elements> >// at the end of the list> >for> (>int> i =>1>; i <= n; i++)> >ll.add(i);> > >// Printing elements> >System.out.println(ll);> > >// Remove element at index 3> >ll.remove(>3>);> > >// Displaying the list after deletion> >System.out.println(ll);> > >// Printing elements one by one> >for> (>int> i =>0>; i System.out.print(ll.get(i) + ' '); } }>

>

>

出力

[1, 2, 3, 4, 5] [1, 2, 3, 5] 1 2 3 5>