Java リスト – Java におけるリスト

Java Listは順序付きのコレクションです。Java ListはCollectionインターフェイスを拡張したインターフェイスです。Java Listは要素を挿入できる位置を制御します。インデックスを使用して要素にアクセスし、リスト内の要素を検索することができます。

Java List

Java Listに関する重要なポイントのいくつかは次のとおりです。

  • Java ListインターフェースはJava Collections Frameworkのメンバーです。
  • Listは重複した要素を追加することができます。
  • Listは「null」要素を持つことができます。
  • Java 8ではListインターフェースに多くのデフォルトメソッドが追加されました。例えば、replaceAll、sort、およびspliteratorです。
  • Listのインデックスは、配列と同様に0から始まります。
  • Listはジェネリックをサポートしており、可能な限り使用する必要があります。Listと組み合わせてジェネリックを使用すると、実行時のClassCastExceptionを回避できます。

Java Listクラスのクラス図

JavaのListインターフェースはCollectionインターフェースを拡張しています。CollectionインターフェースはIterableインターフェースを拡張しています。最もよく使用されるList実装クラスには、ArrayList、LinkedList、Vector、Stack、CopyOnWriteArrayListがあります。AbstractListはListインターフェースの骨格実装を提供し、Listの実装の手間を削減します。

JavaのListメソッド

便利なJavaのListメソッドのいくつかは、

  1. int size():リスト内の要素の数を取得します。
  2. boolean isEmpty():リストが空かどうかを確認します。
  3. boolean contains(Object o):指定された要素がこのリストに含まれている場合はtrueを返します。
  4. Iterator<E> iterator():このリスト内の要素を適切な順序で反復する反復子を返します。
  5. Object[] toArray():このリスト内のすべての要素を適切な順序で含む配列を返します。
  6. boolean add(E e):指定された要素をこのリストの末尾に追加します。
  7. boolean remove(Object o):このリストから指定された要素の最初の出現を削除します。
  8. boolean retainAll(Collection<?> c): 指定されたコレクションに含まれる要素のみをこのリストに保持します。
  9. void clear(): リストからすべての要素を削除します。
  10. E get(int index): Returns the element at the specified position in the list.
  11. E set(int index, E element): Replaces the element at the specified position in the list with the specified element.
  12. ListIterator<E> listIterator(): リスト内の要素に対するリストイテレーターを返します。
  13. List<E> subList(int fromIndex, int toIndex): 指定されたfromIndex(含む)からtoIndex(排他的)までのこのリストの部分のビューを返します。返されたリストはこのリストによってバックアップされているため、返されたリストでの非構造的な変更はこのリストに反映され、その逆もまた然りです。

Java 8でListに追加されたデフォルトメソッドの一部は次のとおりです。

  1. default void replaceAll(UnaryOperator<E> operator): このリストの各要素を、その要素に演算子を適用した結果で置き換えます。
  2. default void sort(Comparator<super E> c): 指定されたComparatorによって誘導される順序でこのリストをソートします。
  3. default Spliterator<E> spliterator(): このリストの要素に対するSpliteratorを作成します。

Java配列からリストへ

Arraysクラスを使用して、配列をリストとして表示することができます。ただし、リストの構造を変更することはできません。これによりjava.lang.UnsupportedOperationExceptionがスローされます。したがって、最良の方法は、配列を反復処理してリストを作成するためにforループを使用することです。以下は、Java配列をリストに適切に変換する方法を示す簡単な例です。

package com.journaldev.examples;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ArrayToList {

	public static void main(String[] args) {
		
		String[] vowels = {"a","e","i","o","u"};
		
		List vowelsList = Arrays.asList(vowels);
		System.out.println(vowelsList);
		
		/**
		 * List is backed by array, we can't do structural modification
		 * Both of the below statements will throw java.lang.UnsupportedOperationException
		 */
		//vowelsList.remove("e");
		//vowelsList.clear();
				
		//配列からリストへの要素のコピーにforループを使用し、リストの変更が安全な方法
		List myList = new ArrayList<>();
		for(String s : vowels){
			myList.add(s);
		}
		System.out.println(myList);
		myList.clear();
	}

}

プロジェクトの要件に応じて、上記のいずれかの方法を選択してください。

Javaリストから配列

A simple example showing the correct way to convert a list to array.

package com.journaldev.examples;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ListToArray {

	public static void main(String[] args) {

		List letters = new ArrayList();

		//例を追加
		letters.add("A");
		letters.add("B");
		letters.add("C");
		
		//リストを配列に変換
		String[] strArray = new String[letters.size()];
		strArray = letters.toArray(strArray);
		System.out.println(Arrays.toString(strArray)); //will print "[A, B, C]"
	}

}

Javaリストのソート

リストをソートする方法は2つあります。自然なソートにはCollectionsクラスを使用するか、List sort()メソッドを使用して独自のComparatorを使用してソートすることができます。以下は、Javaリストのソートの簡単な例です。

package com.journaldev.examples;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;

public class ListSortExample {

	public static void main(String[] args) {
		
		List ints = new ArrayList<>();
		Random random = new Random();
		for (int i = 0; i < 10; i++) ints.add(random.nextInt(1000));
		
		//Collectionsクラスを使用した自然なソート
		Collections.sort(ints);
		System.out.println("Natural Sorting: "+ints);
		
		//カスタムソート、逆順
		ints.sort((o1,o2) -> {return (o2-o1);});
		System.out.println("Reverse Sorting: "+ints);
	}
}

A sample output is given below. Since I am using Random for generating list elements, it will be different every time.

Natural Sorting: [119, 273, 388, 450, 519, 672, 687, 801, 812, 939]
Reverse Sorting: [939, 812, 801, 687, 672, 519, 450, 388, 273, 119]

Javaリストの一般的な操作

Javaリストで実行される最も一般的な操作は、add、remove、set、clear、sizeなどです。以下は、一般的なメソッドの使用を示すシンプルなJavaリストの例です。

package com.journaldev.examples;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ListExample {

	public static void main(String args[]) {
		List vowels= new ArrayList();
		
		//addの例
		vowels.add("A");
		vowels.add("I");
		
		//AとIの間にEを挿入しましょう
		vowels.add(1,"E");
		System.out.println(vowels);
		
		List list = new ArrayList();
		list.add("O");list.add("U");
		
		//文字列をリストに追加
		vowels.addAll(list);
		System.out.println(vowels);
		
		//リストを空にするクリアの例
		list.clear();
		
		//サイズの例
		System.out.println("letters list size = "+vowels.size());
		
		//setの例
		vowels.set(2, "E");
		System.out.println(vowels);
		
		//subListの例
		vowels.clear();vowels.add("E"); vowels.add("E");vowels.add("I"); vowels.add("O");
		list = vowels.subList(0, 2);
		System.out.println("letters = "+vowels+", list = "+list);
		vowels.set(0, "A");
		System.out.println("letters = "+vowels+", list = "+list);
		list.add("U");
		System.out.println("letters = "+vowels+", list = "+list);
		
		
	}

}

上記のJavaリストの例プログラムの出力は;

[A, E, I]
[A, E, I, O, U]
letters list size = 5
[A, E, E, O, U]
letters = [E, E, I, O], list = [E, E]
letters = [A, E, I, O], list = [A, E]
letters = [A, E, U, I, O], list = [A, E, U]

Javaリストイテレータ

以下は、Javaでリストを反復処理する方法を示すシンプルな例です。

package com.journaldev.examples;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ListIteratorExample {

	public static void main(String[] args) {

		List list = new ArrayList<>();
		for(int i=0; i<5; i++) list.add(i);
		
		Iterator iterator = list.iterator();
		
		//シンプルな反復処理
		while(iterator.hasNext()){
			int i = (int) iterator.next();
			System.out.print(i + ", ");
		}
		System.out.println("\n"+list);
		
		//反復子を使用してリストを変更する
		iterator = list.iterator();
		while(iterator.hasNext()){
			int x = (int) iterator.next();
			if(x%2 ==0) iterator.remove();
		}
		System.out.println(list);
		
		//反復処理中にリストの構造を変更する
		iterator = list.iterator();
		while(iterator.hasNext()){
			int x = (int) iterator.next(); //ConcurrentModificationException here
			if(x==1) list.add(10);
		}
	}

}

上記のJavaリストイテレータプログラムの出力は;

0, 1, 2, 3, 4, 
[0, 1, 2, 3, 4]
[1, 3]
Exception in thread "main" java.util.ConcurrentModificationException
	at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
	at java.util.ArrayList$Itr.next(ArrayList.java:851)
	at com.journaldev.examples.ListIteratorExample.main(ListIteratorExample.java:34)

これで、Javaのリストに関するクイックなまとめが完了しました。これらのJavaリストの例が、リストコレクションプログラミングの始めに役立つことを願っています。

Source:
https://www.digitalocean.com/community/tutorials/java-list