04-2Java集合-List

1List集合

List集合的概述

  • 有序集合,这里的有序指的是存取顺序
  • 用户可以精确控制列表中每个元素的插入位置,用户可以通过整数索引访问元素,并搜索列表中的元素
  • 与Set集合不同,列表通常允许重复的元素

List集合的特点

  • 存取有序
  • 可以重复
  • 有索引

List接口的常用方法

方法名描述
void add(int index,E   element)在此集合中的指定位置插入指定的元素
E remove(int   index)删除指定索引处的元素,返回被删除的元素
E set(int index,E   element)修改指定索引处的元素,返回被修改的元素
E get(int   index)返回指定索引处的元素

2List实现类-ArrayList

底层是数组结构实现,查询快、增删慢、线程不安全的

jdk8ArrayList源码分析

源码中
int newCapacity = oldCapacity + (oldCapacity >> 1);

如果此次的添加导致底层elementData数组容量不够,则扩容。 默认情况下,扩容为原来的容量的1.5倍,同时需要将原有数组中的数据复制到新的数组中。

所以开发过程时,知道大概的数据量时,建议使用带参的构造器:ArrayList list = new ArrayList(int capacity)

JDK7默认底层创建了长度是10的Object[]数组elementData,jdk7中的ArrayList的对象的创建类似于单例的饿汉式,而jdk8中的ArrayList的对象的创建类似于单例的懒汉式,延迟了数组的创建,节省内存。

3List实现类-LinkedList

底层是链表结构实现,查询慢、增删快

特有方法

方法名  说明
public void addFirst(E e)在该列表开头插入指定的元素
public void addLast(E e)将指定的元素追加到此列表的末尾
public E getFirst()返回此列表中的第一个元素
public   E getLast()返回此列表中的最后一个元素
public E removeFirst()从此列表中删除并返回第一个元素
public   E removeLast()从此列表中删除并返回最后一个元素

体现了LinkedList的双向链表存储

private static class Node<E> {
    E item;//本node存储信息
    Node<E> next;//下一个node元素存储信息
    Node<E> prev;//上一个node元素存储信息

    Node(Node<E> prev, E element, Node<E> next) {
        this.item = element;
        this.next = next;
        this.prev = prev;
    }
}

 

4常见面试题

ArrayList和LinkedList的异同
二者都线程不安全,相对线程安全的Vector,执行效率高。
此外,ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。对于新增和删除操作add(特指插入)和remove,LinkedList比较占优势,因为ArrayList要移动数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值