logo

JavaのArrayList

Java 配列リスト Java の一部です コレクションフレームワーク これは java.util パッケージのクラスです。 Java で動的配列を提供します。ただし、標準の配列よりも遅い場合がありますが、配列内で大量の操作が必要なプログラムでは役立ちます。このクラスは次の場所にあります java.util パッケージ。メイン Java における ArrayList の利点 つまり、配列を宣言する場合はサイズについて言及する必要がありますが、ArrayList では ArrayList のサイズについて言及する必要はありません。サイズについて言及したい場合は、そうすることができます。

目次

JavaのArrayListとは何ですか?

ArrayList は、List インターフェイスを使用して実装された Java クラスです。 Java ArrayList は、名前が示すように、サイズが配列として固定されていない動的配列の機能を提供します。また、コレクション フレームワークの一部として、配列では利用できない多くの機能があります。



配列リスト_Java

図:

画像を使用して、Integer Object 型が格納されている ArrayList を確認してみましょう。

ArrayList_Integer_Object

Java ArrayList の例

例 1: 次の実装では、ArrayList を作成して使用する方法と、そのサイズについての説明を示します。

ジャワ
// Java program to demonstrate the // working of ArrayList import java.io.*; import java.util.*; class ArrayListExample {  public static void main(String[] args)  {  // Size of the  // ArrayList  int n = 5;  // Declaring the ArrayList with  // initial size n  ArrayList arr1 = 新しい ArrayList (n);  // ArrayList の宣言 ArrayList arr2 = 新しい ArrayList ();  // ArrayList を印刷します System.out.println('Array 1:' + arr1);  System.out.println('配列 2:' + arr2);  // 新しい要素を // リストの最後に追加します for (int i = 1; i<= n; i++) {  arr1.add(i);  arr2.add(i);  }  // Printing the ArrayList  System.out.println('Array 1:' + arr1);  System.out.println('Array 2:' + arr2);  } }>

出力
Array 1:[] Array 2:[] Array 1:[1, 2, 3, 4, 5] Array 2:[1, 2, 3, 4, 5]>

上記プログラムの説明:

ArrayList は動的配列であり、作成時にサイズを指定する必要はありません。項目を動的に追加および削除すると、配列のサイズは自動的に増加します。実際のライブラリの実装はもっと複雑かもしれませんが、以下は、配列がいっぱいになった場合や項目を追加しようとした場合の配列の動作を説明する非常に基本的な考え方です。

Javaでのデザインパターン
  • ヒープ メモリ上に、より大きなサイズのメモリ (たとえば、2 倍のサイズのメモリ) を作成します。
  • 現在のメモリ要素を新しいメモリにコピーします。
  • より大きなメモリが利用できるようになったので、新しい項目が追加されました。
  • 古い記憶を削除します。

Java の ArrayList の重要な機能

  • ArrayList は継承します 抽象リスト クラスを実装し、 リストインターフェース
  • ArrayList はサイズによって初期化されます。ただし、コレクションが拡大または縮小すると、サイズは自動的に増加します。 オブジェクト コレクションから削除されます。
  • Java ArrayList を使用すると、リストにランダムにアクセスできます。
  • ArrayList は使用できません ラッパークラス このような場合に。
  • Java の ArrayList は、 C++ のベクトル
  • ArrayList は同期されていません。 Java における同等の同期クラスは次のとおりです。 ベクター

理解しましょう Java ArrayList の詳細 。以下の画像を見てください。

リストクラスインターフェース

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

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

Java の ArrayList のコンストラクター

ArrayList を作成するには、ArrayList クラスのオブジェクトを作成する必要があります。 ArrayList クラスはさまざまな要素で構成されます。 コンストラクター これにより、配列リストを作成できるようになります。このクラスで使用できるコンストラクターは次のとおりです。

1. 配列リスト()

このコンストラクターは、空の配列リストを構築するために使用されます。次の名前の空の ArrayList を作成したい場合は、 到着しました の場合、次のように作成できます。

ArrayList arr = new ArrayList();>

2. ArrayList(コレクションc)

このコンストラクターは、コレクション c の要素で初期化された配列リストを構築するために使用されます。コレクション c に存在する要素を含む ArrayList arr を作成するとします。この場合、次のように作成できます。

ArrayList arr = new ArrayList(c);>

3. ArrayList(int 容量)

このコンストラクターは、指定された初期容量を使用して配列リストを構築するために使用されます。初期サイズが N の ArrayList を作成するとします。次のように作成できます。

ArrayList arr = new ArrayList(N);>

Java ArrayList メソッド

方法説明
add(int インデックス, オブジェクト要素) このメソッドは、リスト内の特定の位置インデックスに特定の要素を挿入するために使用されます。
add(オブジェクトo) このメソッドは、リストの末尾に特定の要素を追加するために使用されます。
すべて追加(コレクション C) このメソッドは、特定のコレクションのすべての要素を、指定されたコレクションのイテレータによって値が返される順序で、指定されたリストの末尾に追加するために使用されます。
addAll(int インデックス, コレクション C) 特定のコレクションの指定された位置から始まるすべての要素を、指定されたリストに挿入するために使用されます。
クリア() このメソッドは、リストからすべての要素を削除するために使用されます。
クローン() このメソッドは、Java で ArrayList の浅いコピーを返すために使用されます。
含まれていますか? (オブジェクト o) このリストに指定された要素が含まれている場合は true を返します。
ensureCapacity?(int minCapacity) 必要に応じて、この ArrayList インスタンスの容量を増やし、少なくとも最小容量引数で指定された要素数を保持できるようにします。
forEach?(消費者のアクション) すべての要素が処理されるか、アクションが例外をスローするまで、Iterable の各要素に対して指定されたアクションを実行します。
get?(int インデックス) このリスト内の指定された位置にある要素を返します。
インデックスOf(オブジェクトO) 特定の要素が最初に出現するインデックスが返されるか、要素がリストにない場合は -1 が返されます。
空ですか?() このリストに要素が含まれていない場合は true を返します。
lastIndexOf(オブジェクト O) 特定の要素が最後に出現したインデックスが返されるか、要素がリストにない場合は -1 が返されます。
listIterator?() このリスト内の要素に対するリスト反復子を (適切な順序で) 返します。
listIterator?(int インデックス) リスト内の指定された位置から開始して、このリスト内の要素に対するリスト反復子を (適切な順序で) 返します。
削除?(int インデックス) このリスト内の指定された位置にある要素を削除します。
取り除く? (オブジェクト o) 指定された要素が最初に出現した場合、このリストからそれを削除します。
すべて削除しますか?(コレクション c) 指定されたコレクションに含まれるすべての要素をこのリストから削除します。
RemoveIf?(述語フィルター) 指定された述語を満たすこのコレクションの要素をすべて削除します。
RemoveRange?(int fromIndex, int toIndex) このリストから、インデックスが fromIndex (両端を含む) と toIndex (両端を含む) の間にあるすべての要素を削除します。
すべて保持?(コレクション c) 指定されたコレクションに含まれるこのリストの要素のみを保持します。
set?(int インデックス、E 要素) このリスト内の指定された位置にある要素を、指定された要素に置き換えます。
サイズ?() このリスト内の要素の数を返します。
スプリテレータ?() このリスト内の要素に対して遅延バインディングおよびフェイルファストの Spliterator を作成します。
subList?(int fromIndex, int toIndex) このリストの、指定された fromIndex (両端を含む) と toIndex (両端を除く) の間の部分のビューを返します。
toArray() このメソッドは、リスト内のすべての要素を正しい順序で含む配列を返すために使用されます。
toArray(オブジェクト[] O) また、前のメソッドと同じように、このリスト内のすべての要素を正しい順序で含む配列を返すためにも使用されます。
トリムサイズ() このメソッドは、ArrayList のインスタンスの容量をリストの現在のサイズにトリミングするために使用されます。

注記: 汎用の ArrayList を作成することもできます。

// 一般的な整数 ArrayList を作成する
ArrayList arrli = 新しい ArrayList();

Java の ArrayList の重要なポイント

  1. ArrayList は、下線付きのデータ構造のサイズ変更可能な配列または拡張可能な配列です。
  2. ArrayList の重複は許可されます。
  3. 広告掲載オーダーは保存されます。
  4. 異種オブジェクトは許可されます。
  5. ヌル挿入も可能です。

リストにある ArrayList に対していくつかの基本的な操作を実行する方法を見てみましょう。これについては、各操作の実装と並行してさらに説明します。

  • リストへの要素の追加/要素の追加
  • 要素の変更・要素の設定
  • 要素の削除/要素の削除
  • 要素の反復
  • 要素を取得する
  • 2 つの数値の間に要素を追加する
  • 要素の並べ替え
  • 配列リストのサイズ

ArrayList で実行される操作

1. 要素の追加

ArrayList に要素を追加するには、 add() メソッド 。このメソッドは、さまざまなパラメーターに基づいて複数の操作を実行するためにオーバーロードされます。それらは次のとおりです。

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

上記のアプローチの実装を以下に示します。

ジャワ
// Java Program to Add elements to An ArrayList // Importing all utility classes import java.util.*; // Main class class GFG {  // Main driver method  public static void main(String args[])  {  // Creating an Array of string type  ArrayListal = 新しい ArrayList();  // ArrayList に要素を追加 // カスタム入力 al.add('Geeks');  al.add('オタク');  // ここでは追加されるインデックスについて言及しています // al.add(1, 'For');  // ArrayList 内のすべての要素を出力します。 System.out.println(al);  } }>>

出力
[Geeks, For, Geeks]>

2. 要素の変更

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

上記のアプローチの実装を以下に示します。

ジャワ
// Java Program to Change elements in ArrayList // Importing all utility classes import java.util.*; // main class class GFG {  // Main driver method  public static void main(String args[])  {  // Creating an Arraylist object of string type  ArrayListal = 新しい ArrayList();  // Arraylist への要素の追加 // カスタム入力要素 al.add('Geeks');  al.add('オタク');  // 追加するインデックスを指定して追加 al.add(1, 'Geeks');  // Arraylist 要素を出力します System.out.println('Initial ArrayList ' + al);  // 要素を最初のインデックスに設定 al.set(1, 'For');  // 更新された ArrayList を印刷します System.out.println('Updated ArrayList ' + al);  } }>>

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

3. 要素の削除

ArrayList から要素を削除するには、 Remove() メソッド 。このメソッドは、さまざまなパラメーターに基づいて複数の操作を実行するためにオーバーロードされます。それらは次のとおりです。

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

例:

ジャワ
// Java program to Remove Elements in ArrayList // Importing all utility classes import java.util.*; // Main class class GFG {  // Main driver method  public static void main(String args[])  {  // Creating an object of arraylist class  ArrayListal = 新しい ArrayList();  // ArrayList に要素を追加 // カスタム追加 al.add('Geeks');  al.add('オタク');  // 特定のインデックスに要素を追加します al.add(1, 'For');  // ArrayList のすべての要素を出力します。 System.out.println('Initial ArrayList ' + al);  // 上の ArrayList から要素を削除します al.remove(1);  // 更新された Arraylist 要素を出力します System.out.println('インデックス削除後 ' + al);  // ArrayList 内のこの単語要素を削除します al.remove('Geeks');  // 更新された ArrayList を印刷中 System.out.println('オブジェクトの削除後 ' + al);  } }>>

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

4. ArrayList の反復

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

ジャワ
// Java program to Iterate the elements // in an ArrayList // Importing all utility classes import java.util.*; // Main class class GFG {  // Main driver method  public static void main(String args[])  {  // Creating an Arraylist of string type  ArrayListal = 新しい ArrayList();  // 標準の add() メソッドを使用して ArrayList に要素を追加します al.add('Geeks');  al.add('オタク');  al.add(1, 'For');  // Get メソッドと // for ループを使用する for (int i = 0; i< al.size(); i++) {  System.out.print(al.get(i) + ' ');  }  System.out.println();  // Using the for each loop  for (String str : al)  System.out.print(str + ' ');  } }>

出力
Geeks For Geeks Geeks For Geeks>

5. 要素の取得

ジャワ
// Java program to get the elemens in ArrayList import java.io.*; import java.util.*; class GFG {  public static void main (String[] args) {  ArrayList リスト = 新しい ArrayList();  // 数値を追加 list.add(9);  list.add(5);  list.add(6);  System.out.println(リスト);  // メソッドを取得 Integer n= list.get(1);  System.out.println('インデックス 1 の番号は:'+n);  } }>>

出力
[9, 5, 6] at indext 1 number is:5>

6. 2 つの数値の間に要素を追加する

ジャワ
// Java program to add the elements  // between two numbers in ArrayList import java.io.*; import java.util.*; class GFG {  public static void main(String[] args)  {  ArrayList リスト = 新しい ArrayList();  list.add(1);  list.add(2);  list.add(4);  System.out.println(リスト);  // 欠落している要素 3 を挿入 list.add(2, 3);  System.out.println(リスト);  } }>>

出力
[1, 2, 4] [1, 2, 3, 4]>

7. 配列リストのソート

ジャワ
// Java Program for ArrayList Sorting import java.io.*; import java.util.*; class GFG {  public static void main(String[] args)  {  ArrayList リスト = 新しい ArrayList();  list.add(2);  list.add(4);  list.add(3);  list.add(1);  System.out.println('リストを並べ替える前:');  System.out.println(リスト);  コレクション.sort(リスト);  System.out.println('ソート後のリスト:');  System.out.println(リスト);  } }>>

出力
Before sorting list: [2, 4, 3, 1] after sorting list: [1, 2, 3, 4]>

8. 要素のサイズ

ジャワ
// Java program to find the size  // of elements of an ArrayList import java.io.*; import java.util.*; class GFG {  public static void main(String[] args)  {  ArrayList リスト = 新しい ArrayList();  list.add(1);  list.add(2);  list.add(3);  list.add(4);  int b = list.size();  System.out.println('サイズは :' + b);  } }>>

出力
The size is :4>

Java ArrayList の複雑さ

手術

時間計算量

空間の複雑さ

型変数Java

ArrayList への要素の挿入

○(1)

js セットタイムアウト

の上)

ArrayList からの要素の削除

の上)

○(1)

ArrayList 内の要素の走査

の上)

の上)

ArrayList 内の要素を置換する

○(1)

○(1)

Java の ArrayList は、List インターフェイスを実装する Java Collections フレームワークのクラスです。 Java で ArrayList を使用する場合の利点と欠点を次に示します。

Java ArrayList の利点

  1. 動的なサイズ: ArrayList はサイズを動的に拡大および縮小できるため、必要に応じて要素を簡単に追加または削除できます。
  2. 使いやすさ: ArrayList は使いやすいため、多くの Java 開発者にとって人気の選択肢となっています。
  3. 高速アクセス: ArrayList は内部で配列として実装されているため、要素への高速アクセスが可能です。
  4. 順序付きコレクション: ArrayList は要素の順序を保持するため、追加された順序で要素にアクセスできます。
  5. null 値のサポート: ArrayList は null 値を格納できるため、値の欠如を表現する必要がある場合に便利です。

Java ArrayList の欠点

  1. 配列よりも遅い: ArrayList は、リストの途中に要素を挿入するなど、特定の操作では配列よりも遅くなります。
  2. メモリ使用量の増加: ArrayList は動的なサイズを維持し、サイズ変更を処理する必要があるため、配列よりも多くのメモリを必要とします。
  3. スレッド セーフではない: ArrayList はスレッド セーフではありません。つまり、複数のスレッドがリストに同時にアクセスして変更する可能性があり、競合状態やデータ破損が発生する可能性があります。
  4. パフォーマンスの低下: リスト内の要素の数が増加すると、特に要素の検索やリストの途中での要素の挿入などの操作の場合、ArrayList のパフォーマンスが低下する可能性があります。

結論

この記事で覚えておくべきポイントは次のとおりです。

  • ArrayList はコレクション フレームワークの一部です。 AbstractList クラスを継承し、List インターフェイスを実装します。
  • ArrayList は動的配列の実装です。
  • ArrayList は、パラメーターなし、コレクションをパラメーターとして渡す、整数をパラメーターとして渡すなど、さまざまなコンストラクター タイプを使用して初期化できます。
  • ArrayList では、追加、削除、反復、並べ替えの操作を実行できます。

ArrayList の FAQ

Java の ArrayList とは何ですか?

Java の ArrayList は、コレクション フレームワークの一部です。要素を保存するために使用され、サイズは変更可能です。

データは ArrayList にどのように保存されますか?

ArrayList は、ArrayList サイズがいっぱいになるまでデータを保存できます。その後、さらに要素を保存したい場合は、ArrayList のサイズが 2 倍になります。

ArrayList は重複を許可しますか?

はい、ArrayList では重複した値を保存できます。