ArrayList类解析以及部分常用方法分析

ArrayList类和LinkedList类依赖java.util.List接口;
java.util.List接口继承自java.util.Collection接口;
java.util.Collection继承自Iterable接口;
即ArrayList(数组表)和LinkedList(双向链表)可以使用List接口中的所有方法,List中的部分方法继承自Collection接口;
级别大小就是Collection>List>ArrayList=Linkedlist
这边会具体介绍ArrayList集合实现类中的几个公共方法介绍以及应用场景。

int size();

Collection公有方法,继承Collection就可以使用;
返回集合大小,如果集合中实际存在1000个AnyType类型数据则返回1000;
如果Collection u = new ArrayList<>(1000),只是初始化1000个空间的数组集合,而没有放入数据,则u.size()返回值为0;
实际应用情况中size()可以做表中新添加的末位位置,索引size()-1可以代表表中的最后一项;

boolean isEmpty();

Collection公有方法,继承Collection就可以使用;
集合为空true。源码中实际判定为size == 0返回true;

int indexOf(Object o);

List公有方法,接入List接口就可以使用;
从下标0到下标size-1循环校对,返回该对象在数组中的下标位置;如果不存在则返回-1;该方法可以校对null值,返回null下标位置。

bollean contaions(Object o);

Collection公有方法,继承Collection就可以使用;
源码中是 return indexOf(o) >= 0;即校对数组中是否存在o对象。

int lastIndexOf(Object o);

List公有方法,接入List接口就可以使用;
indexOf(Object o)的反向。从下标size-1到下标0循环校对,返回该对象在数组中的下标位置;如果不存在则返回-1;该方法可以校对null值,返回null下标位置。

Object clone();

ArrayList方法;
返回此ArrayList实例的浅副本。(不会复制元素本身。)
如 Object clone = ar.clone();可以得到ar的副本,源码中是继承Object类中的clone方法,然后直接copy数据域和size。

Object[] toArray();

Collection公有方法,继承Collection就可以使用;
创建一个新数组,按ArrayList集合中的顺序,不会影响原来的集合,实际上是作为集合和数组之间的桥梁。
该方法有重载的类型,可以传入一个数组参数,如果数组容量足够,则集合存储进参数数组中,否则会创建一个新的该参数运行时类型的数组。

get(int index),set (int index),remove(int index);

方法如其名,根据下表号返回数据域。

bollean remove(object o);

删除数据域为o的内容,分析该方法源码,如果o为null 则会删除空数据。
需要注意的一点是ArrayList谨慎使用删除方法,该方法会导致运行效率的衰减,即使不删除做判断条件也比删除好很多,数据量较小时无所谓。
源码分析:Java中remove方法核心删除代码是 System.arraycopy 这个方法,该方法原理是将源数组复制到新数组集合,System.arraycopy(elementData, index+1, elementData, index,numMoved); 改方法实际上是将要删除内容的后半段数组,向前移动一位。想要深入研究可以自行百度JAVA System.arraycopy

clear();

Collection公有方法,继承Collection就可以使用;
清除,数据域全为空,size变为0;

boolean addAll(Collection<? extends E> c);

add是添加一个数据,addAll是添加一个集合,都可以定义位置。

先这么多常用的,回头有时间会分析ArrayList下半段源码内容。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值