【JAVA集合IV-ArrayList】

1.ArrayList底层结构

(1)注意事项

  • ArrayList可以加入null,并且可以是多个。
  • ArrayList是由数组来实现数据存储的。
  • ArrayList基本等同于Vector,除了ArrayList是线程不安全(执行效率高),在多线程情况下,不建议使用ArrayList。

(2)底层结构

在这里插入图片描述
由上图可以看到:
ArrayList 继承至AbstractList类,并实现了List、Serializable、Cloneable、RandomAccess接口。

(3)方法

在这里插入图片描述在这里插入图片描述

2.ArrayList源码分析

(1)结论

  • ArrayList中维护了一个Object类型的数组elementData,transient Object[] elementData;//transient表示瞬间,短暂的,表示该属性不会被序列化
  • 当创建ArrayList对象时,如果使用的是无参构造器,则初试elementData容量为0,第一次添加则扩容elementData为10,如果再次添加,这扩容为elementData的1.5倍,也就是15,后面扩展依次类推。
  • 如果使用的是指定大小的构造器,则初试elementData容量为指定大小,如果需要扩容,则直接扩容elementData为1.5倍。

在这里插入图片描述

(2)底层源码剖析

  • 使用ArrayList的无参构造器初始化(源码解析):

在这里插入图片描述

  • 使用ArrayList有参构造器(源码解析):

在这里插入图片描述

3.练习

主要ArrayList的一些常用方法练习:

 public static void main(String[] args) {
        List list = new ArrayList();
        // add:添加单个元素
        list.add("jack");
        list.add(10);
        list.add(new Integer(10));
        list.add(true);
        System.out.println("list=" + list);
        // remove:删除指定元素 //
        list.remove(0);
        //删除第一个元素
        list.remove(true);
        //指定删除某个元素
        System.out.println("list=" + list);
        // contains:查找元素是否存在 S
        System.out.println(list.contains("jack"));//T
        // size:获取元素个数
        System.out.println(list.size());//2
        // isEmpty:判断是否为空
        System.out.println(list.isEmpty());

        // addAll:添加多个元素
        ArrayList list2 = new ArrayList();
        list2.add("红楼梦");
        list2.add("三国演义");
        list.addAll(list2);
        System.out.println("list=" + list);


        // containsAll:查找多个元素是否都存在
        System.out.println(list.containsAll(list2));

        // removeAll:删除多个元素
        list.add("聊斋");
        list.removeAll(list2);
        System.out.println("list=" + list);//[聊斋]


        //toArray():将列表以数组的形式返回,类型为Object
        Object[] objects = list.toArray();
        System.out.println(objects.toString().toCharArray());

        //iterator():迭代器,集合专用遍历方式
        Iterator iterator = list.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值