Java集合教程 - Java列表

列表是对象的有序集合,在List界面中定义。List 接口表示集合框架中的列表。

列表可以具有重复的元素。并且我们可以在列表中存储多个空值。

List接口继承了集合接口和它添加了一些方法来支持使用索引访问其元素。

我们可以在List或的末尾添加一个元素在由整数索引标识的任何位置。

列表中元素的索引是从零开始的。

我们可以使用以下方法使用索引添加,获取,删除和替换其元素。its add(int index, E element),

addAll(int index, Collection extends E> c),

get(int index),

remove(int index)

set(int index, E element)

我们可以搜索元素的位置List使用indexOf(Object o)或lastIndexOf(Object o)方法。

indexOf()方法搜索指定的对象从开始,它返回索引的对象的第一次出现。

lastIndexOf()方法从列表的末尾搜索元素。两个方法都返回-1如果List不包含指定的对象。

subList(int fromIndex,int toIndex)返回一个子列表的原始列表从索引fromIndex(包括)到索引toIndex(独占)。

ListIterator从List接口可以返回在向前和向后方向上遍历其元素。List APIs

ArrayList和LinkedList

以下是实现List接口的两个类:ArrayList

LinkedList

ArrayList由数组备份。链接列表由链接列表备份。

如果我们频繁地访问列表的元素,那么ArrayList会表现得更好。访问ArrayList中的元素更快,因为它是数组后端。

从ArrayList添加或删除元素更慢除非从头到尾,因为ArrayList必须执行数组副本内部保持元素的顺序。

LinkedList的性能优于ArrayList用于添加和从列表中间删除元素。但是,访问列表中的元素更慢,除非在列表的头部。import java.util.ArrayList;

import java.util.List;
public class Main {
public static void main(String[] args) {
List list = new ArrayList<>();
list.add("Java");
list.add("Oracle");
list.add("CSS");
list.add("XML");
System.out.println("List: " + list);
int count = list.size();
System.out.println("Size of List: " + count);
// Print each element with its index for (int i = 0; i < count; i++) {
String element = list.get(i);
System.out.println("Index=" + i + ", Element=" + element);
}
List subList = list.subList(1, 3);
System.out.println(subList);
// Remove "CSS" from the list list.remove("CSS"); // Same as list.remove(2); System.out.println(list);
}
}

上面的代码生成以下结果。

Java 例外列表 java的列表_List

ListIterator

我们可以使用ListIterator接口以遍历列表。

ListIterator接口继承了Iterator接口并且它增加了几个方法来从当前位置向后访问列表中的元素。

以下代码显示了如何从列表中获取列表迭代器:ListIterator fullIterator = list.listIterator();

为了得到在正向从索引5开始的列表迭代器,使用以下代码。ListIterator partialIterator = list.listIterator(5);

以下代码显示如何使用ListIterator。import java.util.ArrayList;

import java.util.List;
import java.util.ListIterator;
public class Main {
public static void main(String[] args) {
List list = new ArrayList<>();
list.add("Oracle");
list.add("SQL");
list.add("CSS");
list.add("XML");
System.out.println("List: " + list);
// Get the list iterator ListIterator iterator = list.listIterator();
while (iterator.hasNext()) {
int index = iterator.nextIndex();
String element = iterator.next();
System.out.println("Index=" + index + ", Element=" + element);
}
// Reuse the iterator to iterate from the end to the beginning while (iterator.hasPrevious()) {
int index = iterator.previousIndex();
String element = iterator.previous();
System.out.println("Index=" + index + ", Element=" + element);
}
}
}

上面的代码生成以下结果。

Java 例外列表 java的列表_java 表_02

ListIterator可以向前看或回头一个列表。

next()方法向前移动一个索引,而previous()方法向后移动一个索引。

如果使用next()方法,后跟previous()方法,迭代器返回到相同的位置。