List集合
java.util.List
接口,继承
Collection
接口,有序的
collection
(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。与
Set
接口不同,List接口通常允许重复元素。
list接口特点:
- List集合是有序的集合,存储和取出的顺序一致
- List集合允许存储重复的元素
- List集合中的每个元素具有索引
提示:集合类名后缀是List,列如ArrayList,LinkedList等,都是List接口实现类,都具有List接口的特点。
List接口特有的方法(带有索引)
- public void add(int index,E element) 在列表的指定位置上插入元素。
- public E get(int index) 返回列表中指定位置的元素。
- public E set(int index,E element) 用指定元素替换列表中指定位置的元素,并返回替换前的元素。
- public E remove(int index) 移除列表中指定位置的元素,并返回被移除之前的元素。
ArrayList集合
java.util.ArrayList 集合数据存储的结构是数组结构。元素增删慢,查找快,线程不安全,运行速度快。由于日常开发中使用最多的功能为查询数据、遍历数据,所以
ArrayList 是最常用的集合。许多程序员开发时非常随意地使用
ArrayList
完成任何需求,并不严谨,这种用法是不提倡的。
ArrayList
源代码分析
底层是Object对象数组,数组存储的数据类型是Object,数组名字为elelmentData.(可以分析出ArrayList是数据结构集合)
transient Object[] elementData;
LinkedList集合
java.util.LinkedList 集合数据存储的结构是链表结构。方便元素添加、删除的集合。
集合特点:元素增删快,查找慢,线程不安全,运行速度快。
LinkedList是一个双向链表,图解如下:
ListedList集合特有方法
实际开发中对一个集合的添加与删除经常涉及首位操作,而LinkedList提供了大量首位操作的方法。
public void addFirst(E e)
:
将指定元素插入此列表的开头。
public void addLast(E e)
:
将指定元素添加到此列表的结尾。
public E getFirst()
:
返回此列表的第一个元素。
public E getLast()
:
返回此列表的最后一个元素。
public E removeFirst()
:
移除并返回此列表的第一个元素。
public E removeLast()
:
移除并返回此列表的最后一个元素。
public E pop()
:
从此列表所表示的堆栈处弹出一个元素。
public void push(E e)
:
将元素推入此列表所表示的堆栈。
public boolean isEmpty()
:如果列表不包含元素,则返回
true
。
解析:成员变量size是长度,记录了集合中存储元素的个数。first和last分别表示链表开头和结尾的元素。
LinkedList内部类Node类分析:(可以分析出LinkedList是双链表集合)
private static class Node<E>{
E item;
Node<E> next;
Node<E> prev;
Node(Node<E> prev,E element,node<E> next){
this.item = elelment;
this.next = next;
this.prev = prev;
}
}
解析:LinkedList集合中的内部类Node,表示链表中节点对象,Node类具有3个成员变量:
- item :存储的对象
- next : 下一个节点
- prev : 上一个节点
从Node类的源代码中分析出来,LinkedList是双向链表,一个对象,他记录了上一个节点,也记录了下一个节点。