Java---List ArrayList和LinkedList

List

List接口在Collection的基础上添加了大量的方法,使得可以在List的中间插入和移除元素。

有两种List:(1)基本的ArrayList,在随机访问元素快,但是在List中间插入和移除元素较慢。(2)LinkedList,代价较低地在List中间进行插入和移除操作,优化了顺序访问。LinkedList在随机访问方面比较慢,但是特性集较ArrayList更大。

Method
Type Method Significance
boolean add(e) 在list尾部添加指定元素 返回是否成功
void add(int ,e) 指定位置添加元素
boolean addAll([int index],Collection<? extends E> c) 添加指定集合的所有元素到List指定位置 默认是尾部
void clear() 清除所有元素
boolean contains(Object o) 是否包含这个元素
boolean containsAll(Collection<?> c) 判断list是否包含指定集合的所有元素
boolean equals(Object o) 比较指定对象和这个list是否相等
E get(int index) 得到指定位置元素
int indexOf(Object o) 返回元素第一次出现的index -1表示未出现
boolean isEmpty() 返回list是否为空
Iterator < E> iterator() 返会List元素迭代器
int lastIndexOf(Object o) 从后往前返回元素第一次出现的index
ListIterator < E> listIterator([int index] 返回list迭代器 可以指定位置开始
E remove(int index) 移除指定位置元素
boolean remove(Object o) 移除list第一次出现的指定元素
boolean removeAll(Collection<?> c) 移除指定collection和list所有共有的元素
boolean retainAll(Collection<?> c) 只保留指定collection和list所有共有的元素
E set(int index, E element) 用指定元素替换list指定位置的元素
int size() 返回list中元素个数
List< E> subList(int fromIndex, int toIndex) 返回子list
Object[] toArray() 转换为数组
ArrayList
  1. ArrayList是List接口的非同步实现,底层使用数组保存所有元素,其操作基本上是对数组的操作。
  2. ArrayList可以理解为动态数组(容量能动态增长),该容量是指用来存储列表元素的数组的大小,随着向ArrayList中不断添加元素,其容量也自动增长
  3. ArrayList是有序的,允许包括null在内的所有元素
LinkedList
  1. LinkedList基于链表的List接口的非同步实现
  2. LinkedList链表有一系列表项连接而成,一个表项总是包含3个部分:元素内容,前驱表和后驱表。
  3. 无论LikedList是否为空,链表内部都有一个header表项,它既表示链表的开始,也表示链表的结尾。表项header的后驱表项便是链表中第一个元素,表项header的前驱表项便是链表中最后一个元素。
  4. LinkedList是有序的集合,LinkedList允许包括null在内的所有元素
  5. LinkedList是fail-fast的
Method

ArrayList和LinkedList都实现了List接口 所以拥有List的方法 但是LinkedList还有些独有的

Type Method Significance
void addFirst(E e) 在list头部插入指定元素
void addLast(E e) 在list尾部插入指定元素
Iterator descendingIterator() 返回双端队列元素的迭代器 按逆序
E element()/peek() 返回 但是并没有移除,list中的第一个元素
E getFirst() 返回list中第一个元素
E getLast() 返回list中最后一个元素
boolean offer(E e) 添加指定元素到list尾部
E peekLast() 返回 但是并没有移除,list中的最后一个元素 list空的时候返回null
E pollFirst() 返回 并移除,list中的第一个元素 list空的时候返回null
E pollLast() 返回 并移除,list中的最后一个元素 list空的时候返回null
E pop() 弹出一个元素从表示list的stack中
void push(E e) 压入一个元素从表示list的stack中
E removeFirst() 移除并返回list中第一个元素
E removeLast() 移除并返回list中最后一个元素
boolean removeLastOccurrence(Object o) 移除list中最后一次出现的指定元素
Difference
  1. 底层实现:LinkedList底层是双向链表 ;ArrayList底层是可变数组
  2. 随机访问:LinkedList随机访问效率低 ;ArrayList随机访问效率高,因为LinkedList需要移动指针
  3. 插入删除:LinkedList插入和删除效率快 ;ArrayList插入和删除效率低,因为ArrayList要移动数据
Arrays.asList() (20.4.14)
  1. 该方法是将数组转化成List集合的方法。
    例如: List<String> list = Arrays.asList("a","b","c");
  2. 该方法适用于对象型数据的数组(String、Integer…)
  3. 该方法不建议使用于基本数据类型的数组(byte,short,int,long,float,double,boolean)
  4. 该方法将数组与List列表链接起来:当更新其一个时,另一个自动更新
  5. 返回的list不支持add()、remove()、clear()等方法。因为这个ArrayList不是java.util包下的,而是java.util.Arrays.ArrayList。它是Arrays类自己定义的一个静态内部类,这个内部类没有实现add()、remove()方法,而是直接使用它的父类AbstractList的相应方法。而AbstractList中的add()和remove()是直接抛出java.lang.UnsupportedOperationException异常。
发布了22 篇原创文章 · 获赞 42 · 访问量 1770

猜你喜欢

转载自blog.csdn.net/zzZsleep7/article/details/105428326