Java List 是一个有序集合。Java List 是扩展 Collection 接口的接口。Java List 提供了控制插入元素位置的能力。您可以通过索引访问元素,也可以在列表中搜索元素。
Java List
关于 Java List 的一些重要点是;
- Java List 接口是 Java 集合框架的成员。
- 列表允许添加重复元素。
- 列表允许有 ‘null’ 元素。
- 在 Java 8 中,List 接口有许多默认方法,例如 replaceAll、sort 和 spliterator。
- 列表索引从 0 开始,就像数组一样。
- 列表支持泛型,我们应该尽可能使用它。在 List 中使用泛型将避免运行时的 ClassCastException。
Java List 类图
Java List 接口扩展了 Collection 接口。Collection 接口扩展了 Iterable 接口。一些最常用的 List 实现类包括 ArrayList、LinkedList、Vector、Stack、CopyOnWriteArrayList。AbstractList 提供了 List 接口的骨架实现,以减少实现 List 接口的工作量。
Java List 方法
一些有用的 Java List 方法包括:
- int size(): 获取列表中元素的数量。
- boolean isEmpty(): 检查列表是否为空。
- boolean contains(Object o): 如果列表包含指定元素,则返回 true。
- Iterator<E> iterator(): 返回此列表中元素的迭代器,按适当顺序。
- Object[] toArray(): 返回包含此列表中所有元素的数组,按适当顺序排列。
- boolean add(E e): 将指定的元素追加到此列表的末尾。
- boolean remove(Object o): 从此列表中移除第一个出现的指定元素。
- boolean retainAll(Collection >): 仅保留该列表中包含在指定集合中的元素。
- void clear(): 从列表中移除所有元素。
- E get(int index): Returns the element at the specified position in the list.
- E set(int index, E element): Replaces the element at the specified position in the list with the specified element.
- ListIterator
listIterator() : 返回列表中元素的列表迭代器。 - List
subList(int fromIndex, int toIndex) : 返回此列表中从指定的 fromIndex(包括)到指定的 toIndex(不包括)之间的部分的视图。返回的列表由此列表支持,因此返回列表中的非结构性更改将反映在此列表中,反之亦然。
Java 8 中添加到 List 的一些默认方法包括:
- default void replaceAll(UnaryOperator
operator) : 使用运算符对列表中的每个元素进行替换。 - default void sort(Comparator super E> c): 根据指定比较器引起的顺序对此列表进行排序。
- 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类进行自然排序,或者我们可以使用列表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