Java集合(二)

目录

1.List接口概述

2.ArrayList的底层源码分析

3.LinkedList的源码分析

4.Vector的源码分析

5.List接口中的常用方法


1.List接口概述

特点:

  1. 存储的元素都是有序的可重复的。
  2. 因为其有序和可重复性,我们通常用List接口的实现类来替换数组。

具体实现类的特点

ArrayList:①作为List接口的主要实现类。
           ②线程不安全的,效率较高。
           ③底层使用Object数组来进行存储


LinkedList:①底层使用双向链表来进行存储。
            ②对于频繁的插入和删除操作效率比较高。


Vector:①作为List接口的古老实现类,在Java1就已经存在了。
        ②线程安全的,效率较低。
        ③底层使用Object数组来进行存储。

2.ArrayList的底层源码分析

jdk7中的源码分析

①当使用空参构造器创建对象时,底层创建了一个长度为10的Object数组。

②添加数据时,先判断当前Object数组长度是否足够,如果长度足够则直接添加;如果长度不够则先将底层数组长度扩容为原来容量的1.5倍,同时将原有数组赋值给新数组。

建议:因为当底层数组不够长时需要扩容,所以如果知道大概要存储多少数据,则建议使用带参构造器来指定底层数组的长度。

jdk8中的源码分析

①使用空参构造器创建对象时,底层初始化为{}。

②在第一次调用add()方法时底层才创建长度为10的Object数组。

③后续添加数据同jdk7同样。

jdk7中的ArrayList类似于单例模式中的饿汉式,jdk8中的类似于懒汉式,延迟了数组对象的创建,节省了内存。

3.LinkedList的源码分析

在LinkedList中定义了内部类Node,每个Node对象对应双链表中的一个节点。 

4.Vector的源码分析

除了在扩容时将容量变为原来容量的两倍之外其他和jdk7中ArrayList一样。 

5.List接口中的常用方法

  1. add(int index,Object obj):向index位置插入obj对象。
  2. addAll(int index,Collection col):将col中的数据插入到指定位置 。
  3. get(int index):获取指定位置。
  4. indexOf(Object obj):返回当前对象在当前list对象中首次出现的索引。
  5. lastIndexOf(Object obj):返回最后一次出现的索引。
  6. Object remove(int index):将指定位置的元素删除,并返回。
  7. Object set(int index,Object obj):将指定位置的元素设置为obj,并返回。
  8. subList(int index,int endIndex):获取一个子List。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值