Java---List ArrayList和LinkedList

List

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

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

Method
TypeMethodSignificance
booleanadd(e)在list尾部添加指定元素 返回是否成功
voidadd(int ,e)指定位置添加元素
booleanaddAll([int index],Collection<? extends E> c)添加指定集合的所有元素到List指定位置 默认是尾部
voidclear()清除所有元素
booleancontains(Object o)是否包含这个元素
booleancontainsAll(Collection<?> c)判断list是否包含指定集合的所有元素
booleanequals(Object o)比较指定对象和这个list是否相等
Eget(int index)得到指定位置元素
intindexOf(Object o)返回元素第一次出现的index -1表示未出现
booleanisEmpty()返回list是否为空
Iterator < E>iterator()返会List元素迭代器
intlastIndexOf(Object o)从后往前返回元素第一次出现的index
ListIterator < E>listIterator([int index]返回list迭代器 可以指定位置开始
Eremove(int index)移除指定位置元素
booleanremove(Object o)移除list第一次出现的指定元素
booleanremoveAll(Collection<?> c)移除指定collection和list所有共有的元素
booleanretainAll(Collection<?> c)只保留指定collection和list所有共有的元素
Eset(int index, E element)用指定元素替换list指定位置的元素
intsize()返回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还有些独有的

TypeMethodSignificance
voidaddFirst(E e)在list头部插入指定元素
voidaddLast(E e)在list尾部插入指定元素
IteratordescendingIterator()返回双端队列元素的迭代器 按逆序
Eelement()/peek()返回 但是并没有移除,list中的第一个元素
EgetFirst()返回list中第一个元素
EgetLast()返回list中最后一个元素
booleanoffer(E e)添加指定元素到list尾部
EpeekLast()返回 但是并没有移除,list中的最后一个元素 list空的时候返回null
EpollFirst()返回 并移除,list中的第一个元素 list空的时候返回null
EpollLast()返回 并移除,list中的最后一个元素 list空的时候返回null
Epop()弹出一个元素从表示list的stack中
voidpush(E e)压入一个元素从表示list的stack中
EremoveFirst()移除并返回list中第一个元素
EremoveLast()移除并返回list中最后一个元素
booleanremoveLastOccurrence(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");
    但是 需要注意的是 List<String> list = Arrays.asList(temp); temp是个string数组 这样可以
    List<Integer> list = Arrays.asList(temp); temp是个int数组 这样不行
  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异常。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值