Java 列表
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
接口可以返回在向前和向后方向上遍历其元素。
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<String> 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<String> 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); } }
上面的代码生成以下结果。
ListIterator
我们可以使用 ListIterator
接口以遍历列表。
ListIterator
接口继承了 Iterator
接口并且它增加了几个方法来从当前位置向后访问列表中的元素。
以下代码显示了如何从列表中获取列表迭代器:
ListIterator<String> fullIterator = list.listIterator();
为了得到在正向从索引5开始的列表迭代器,使用以下代码。
ListIterator<String> 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<String> 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<String> 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); } } }
上面的代码生成以下结果。
ListIterator
可以向前看或回头一个列表。
next()
方法向前移动一个索引,而 previous()
方法向后移动一个索引。
如果使用 next()
方法,后跟 previous()
方法,迭代器返回到相同的位置。
更多建议: