Java List集合

list脑图

一、方法:主要说一下增删改查

  add(E)、add(int, E)、remove(int)、remove(Object)、set(int, E)、forEach()、iterator()
    add(E):在末尾增加元素
    add(int, E):在指定位置增加元素

    remove(int):删除指定位置的元素
    remove(Object):删除指定元素

    set(int, E):修改指定位置的元素

    forEach():for循环遍历集合
    iterator():迭代器遍历元素

  LinkedList特有方法:

    addFirst(E e):在链表头部插入一个元素;  
    addLast(E e):在链表尾部添加一个元素; 
    push(E e):与addFirst方法一致;
    offer(E e):在链表尾部插入一个元素;   

    removeFirst(E e):删除头,获取元素并删除;
    removeLast(E e):删除尾,获取元素并删除;
    pollFirst():删除头;
    pollLast():删除尾;
 
    getFirst():获取第一个元素;  
    getLast():获取最后一个元素; 
    peek():获取第一个元素,但是不移除;  
    pollFirst():查询并删除头;  
    pollLast():删除尾;  
    poll():查询并移除第一个元素;

二、组成:

        1、ArrayList:底层数组,查询快,增删慢,线程不安全(效率高)

                               查询快:因为底层是数组,在查询的时候可以根据索引来查询效率高;

                               增删慢:在添加或者删除中间元素时,会改变数组的结构,所以效率低;

        2、LinkedList:底层链表,查询慢,增删快,线程不安全(效率高)

                              查询慢:因为底层是链表,在查询时需要从头开始找所以效率低;

                              增删快:在添加或者删除中间元素时,只需要改变节点的指向,所以效率高;

        3、vector:线程安全(相对ArrayList效率低),底层是数组

三、扩容机制

//维护了一个Object类型的数组elementData
//transient:表示只序列化有实际值的元素,如:此时数组长度为10,现在只有5个元素,则只序列化这5个元素
transient Object[] elementData; 

//elementData原来的数组,newCapacity为新数组的长度
elementData = Arrays.copyOf(elementData, newCapacity);

1、ArrayList:使用的扩容方法:Arrays.copyOf() 

//构造一个具有指定初始elementData容量的0,需要扩容时,则直接扩容elementData为1.5倍
public ArrayList(int initialCapacity)

//默认构造一个初始elementData容量为0,第一次添加elementData容量变为10,
  //然后再次扩容时,elementData容量为1.5倍 
public ArrayList() 

//构造一个包含指定 collection 的元素的列表    
public ArrayList(Collection<? extends E> c) 

     2、vector:使用的扩容方法:Arrays.copyOf()

//使用指定的初始容量0,下次扩容为10,再次扩容为原来的2倍  
public Vector()

//指定容量,下次扩容为原来的2倍  
public Vector(int initialCapacity)

//构造一个包含指定 collection 的元素的列表
public Vector(Collection<? extends E> c)
   
//使用指定的初始容量和容量增量   
public Vector(int initialCapacity,int capacityIncrement)

3、LinkedList:没有扩容机制,往链表前后加元素

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

codersAllen

你的鼓励将是我最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值