Java List – Java 中的列表

Java List是一個有序集合。Java List是一個擴展了Collection接口的接口。Java List提供了控制插入元素位置的能力。您可以通過索引訪問元素,也可以在列表中搜索元素。

Java List

關於Java List的一些重要點如下:

  • Java List接口是Java Collections Framework的一部分。
  • 列表允許添加重複元素。
  • 列表允許有“null”元素。
  • 在Java 8中,List接口添加了許多默認方法,例如replaceAll、sort和spliterator。
  • 列表的索引從0開始,就像數組一樣。
  • 列表支持泛型,我們應該在可能的情況下使用它。使用泛型與列表將在運行時避免ClassCastException。

Java List類別圖

Java List 接口扩展了 Collection 接口。Collection 接口扩展了 Iterable 接口。一些最常用的 List 实现类包括 ArrayList、LinkedList、Vector、Stack、CopyOnWriteArrayList。AbstractList 提供了 List 接口的骨架实现,以减少实现 List 的工作量。

Java 列表方法

一些有用的 Java 列表方法包括:

  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): 保留此列表中包含在指定集合中的元素。
  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 listIterator(): 返回列表中元素的列表迭代器。
  13. List subList(int fromIndex, int toIndex): 返回此列表中指定fromIndex(含)和toIndex(不含)之间的部分的视图。返回的列表由此列表支持,因此返回列表中的非结构性更改将反映在此列表中,反之亦然。

Java 8 中添加到 List 的一些默认方法包括:

  1. default void replaceAll(UnaryOperator operator): 使用应用于该元素的运算符的结果替换此列表的每个元素。
  2. default void sort(Comparator c): 根据指定比较器引起的顺序对此列表进行排序。
  3. default Spliterator 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 清單排序

有兩種方法可以對清單進行排序。我們可以使用 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列表上执行的最常见操作是添加、删除、设置、清除、大小等。以下是一个简单的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();
		
		//添加示例
		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());
		
		//设置示例
		vowels.set(2, "E");
		System.out.println(vowels);
		
		//子列表示例
		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