1、Java LinkedList
LinkedList类与ArrayList几乎相同,也是集合List的实现类,相比ArrayList,其使用场景并不多,但有些时候也能用到。
例如:
//导入 LinkedList类 import java.util.LinkedList; public class Main { public static void main(String[] args) { LinkedList langs = new LinkedList(); langs.add("c"); langs.add("java"); langs.add("python"); langs.add("cjavapy"); System.out.println(langs); } }
2、ArrayList和LinkedList的区别
LinkedList类是一个集合,可以包含许多相同类型的对象,就像ArrayList一样。
LinkedList类具有与ArrayList类相同的所有方法,因为它们都实现了List接口。
但是,虽然可以以相同的方式使用ArrayList类和LinkedList类,但是它们的构建方式却大不相同。
ArrayList和LinkedList的区别有以下几点:
1) ArrayList是实现了基于动态数组的数据结构,而LinkedList是基于链表的数据结构;
2) 对于随机访问get和set,ArrayList要优于LinkedList,因为LinkedList要移动指针;
3) 对于添加和删除操作add和remove,一般情况下LinkedList要比ArrayList快,因为ArrayList要移动数据。一般首选用ArrayList,由于LinkedList可以实现栈、队列以及双端队列等数据结构,所以当特定需要时候,使用LinkedList。
3、LinkedList 方法
在许多情况下,ArrayList效率更高,因为通常需要访问列表中的某一个元素,但是LinkedList提供了几种方法来更有效地执行某些操作:
方法 | 描述 |
public boolean add(E e) | 链表末尾添加元素,返回是否成功, 成功为 true,失败为 false。 |
public void add(int index, E element) | 向指定位置插入元素。 |
public boolean addAll(Collection c) | 将一个集合的所有元素添加到链表后面, 返回是否成功,成功为 true,失败为 false。 |
public boolean addAll(int index, Collection c) | 将一个集合的所有元素添加到链表的指定位置后面, 返回是否成功,成功为 true,失败为 false。 |
public void addFirst(E e) | 元素添加到头部。 |
public void addLast(E e) | 元素添加到尾部。 |
public boolean offer(E e) | 向链表末尾添加元素, 返回是否成功,成功为 true,失败为 false。 |
public boolean offerFirst(E e) | 头部插入元素,返回是否成功,成功为 true,失败为 false。 |
public boolean offerLast(E e) | 尾部插入元素,返回是否成功,成功为 true,失败为 false。 |
public void clear() | 清空链表。 |
public E removeFirst() | 删除并返回第一个元素。 |
public E removeLast() | 删除并返回最后一个元素。 |
public boolean remove(Object o) | 删除某一元素,返回是否成功,成功为 true,失败为 false。 |
public E remove(int index) | 删除指定位置的元素。 |
public E poll() | 删除并返回第一个元素。 |
public E remove() | 删除并返回第一个元素。 |
public boolean contains(Object o) | 判断是否含有某一元素。 |
public E get(int index) | 返回指定位置的元素。 |
public E getFirst() | 返回第一个元素。 |
public E getLast() | 返回最后一个元素。 |
public int indexOf(Object o) | 查找指定元素从前往后第一次出现的索引。 |
public int lastIndexOf(Object o) | 查找指定元素最后一次出现的索引。 |
public E peek() | 返回第一个元素。 |
public E element() | 返回第一个元素。 |
public E peekFirst() | 返回头部元素。 |
public E peekLast() | 返回尾部元素。 |
public E set(int index, E element) | 设置指定位置的元素。 |
public Object clone() | 克隆该列表。 |
public Iterator descendingIterator() | 返回倒序迭代器。 |
public int size() | 返回链表元素个数。 |
public ListIterator listIterator(int index) | 返回从指定位置开始到末尾的迭代器。 |
public Object[] toArray() | 返回一个由链表元素组成的数组。 |
public T[] toArray(T[] a) | 返回一个由链表元素转换类型而成的数组。 |
4、循环遍历LinkedList中的元素
使用 for 配合 size() 方法来迭代列表中的元素:
// 引入 LinkedList 类 import java.util.LinkedList; public class JavaTest { public static void main(String[] args) { LinkedList<String> langs = new LinkedList<String>(); langs.add("c"); langs.add("java"); langs.add("python"); langs.add("cjavapy"); for (int size = langs.size(), i = 0; i < size; i++) { System.out.println(langs.get(i)); } } }
注意:size() 方法用于计算链表的大小。
也可以使用 for-each 来迭代元素:
// 引入 LinkedList 类 import java.util.LinkedList; public class RunoobTest { public static void main(String[] args) { LinkedList<String> langs = new LinkedList<String>(); langs.add("c"); langs.add("java"); langs.add("python"); langs.add("cjavapy"); for (String i : langs) { System.out.println(i); } } }