[Java]ArrayList的常用方法

ArrayList是实现了List接口的集合类,ArrayList的底层存储结构是数组,但是这个ArrayList生让这个数组自动扩容,不必担心空间不够的问题。数组结构也决定了ArrayList从中间插入和删除的效率很低,但是访问数据的效率很高。

一、ArrayList对象的创建

(1)ArrayList() ;无参构造

ArrayList<Integer> arr=new ArrayList<>();

此时arr对象中的数组指向是一个在ArrayList类中的静态默认空数组。

 (2)有参构造

i.ArrayList(int initialCapacity) ;参数初始容量

ArrayList<Integer> arr1=new ArrayList<>(10);
//创建一个数组初始容量为10的ArrayList对象。

ii.ArrayList(Collection<? extends E> c) ;参数为实现了Collection接口的对象。

ArrayList<Integer> arr2=new ArrayList<>(new ArrayList<>(11));
//创建了一个有着和传入对象相同数据的ArrayList对象。

二、ArrayList的使用

常用的方法和之前介绍的List接口的常用方法一模一样

List的常用方法:

https://blog.csdn.net/qq_61925446/article/details/130468115

值得一提的是,ArrayList的subList方法,截取返回的数组是父表的子数组,改变个子数组的值,父表的值也会被改变 

三、ArrayList的遍历

ArrayList有三种方法,分别是逐个get遍历,使用forEach遍历,还有迭代器遍历

(1)逐个get遍历

//已经创建了一个名为arr1的ArrayList对象
for (int i = 0; i <arr1.size() ; i++) {
   System.out.println(arr1.get(i));
}

(2)foreach遍历

//已经创建了一个名为arr1的ArrayList对象
for (Integer a:
     arr1) {
    System.out.println(a);
}

(3)使用迭代器遍历

Iterator<Integer> it=arr1.listIterator();
while(it.hasNext()){
     System.out.println(it.next());
}

ArrayList有两个迭代器,分别为listIterator和Iterator

这两个迭代器都能用来遍历

四。ArrayList的扩容机制

ArrayList在每次插入数据时,ArrayList对象会自动检测空间是否足够,如果已经没有空间插入数据,则会自动1.5倍扩容。

如果用户的扩容要求比1.5倍还大,则按照用户要求的空间扩容。

扩容之前回检测是否能够扩容成功,防止扩容失败

使用无参构造时,ArrayList中的数组将会使用下面这个静态类数组赋值

此时add一个数据,ArrayList会直接将数组的容量扩充至默认容量10。之后如果再需要扩容就是1.5倍扩容。

如果使用的是有参构造,则直接使用1.5倍扩容,值得注意的是,当有参构造的参数,传入容量是0时,ArrayList会被赋值为下面这个静态的数组,和无参构造使用的静态数组不是一个数组。

这个数组在扩容时,由于初始容量是0,所以他的一点五倍也是0,所以首次扩容的容量为传入的扩容要求size+1,也就是1。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值