集合源码:ArrayList的底层实现

1、ArrayList的概述:

        ArrayList是List的实现类,存储多个Object对象;特点是:有序、有下标、元素可以重复;下标范围是:0~size()-1;线程不安全,因为底层方法是非同步的

2、ArrayList的实现原理:

        ArrayList,底层封装了一个数组,利用一个int size()统计数组中元素的个数(应用层:集合中元素的个数),创建集合对象时,底层数组长度为0,只有当第一次往集合中添加(第一次调用add方法)元素的时候,为数组分配空间,长度默认为10,如果存储的元素个数达到数组的长度上限时,自动扩容,每次扩容为原来的1.5倍(每次扩容倍数太大,空间利用率低;每次扩容一个空间,导致频繁的扩容,降低程序效率)

        ArrayList:底层使用数组实现,查询效率较快,增(插入)删除操作时效率较低

ArrayList底层实现:ArrayList的构造方法(源码)

3、ArrayList常用的方法:

        常见的方法:部分继承与父接口Collection

        a.void add(Object obj):往集合中添加一个对象,添加成功-true;不成功-false

         b.Object get(int index):通过下标获取对象 注意:如果指定下标超过下标范围,则运行报错,报错信息为:java.lang.IndexOutOfBoundsException(下标越界)

        c.Object remove(int index):根据下标删除集合元素,被删除的元素作为返回值进行返回         d.Object set(int index,Object obj):根据下标替换对应下标的元素,被替换元素作为返回值返回

        e.boolean contains(Object o) :判断集合中是否包含某个对象,包含-true;不包含-false

        练习代码 

public static void main(String[] args) {
        //存储三个字符串,“张三”、“李四”、“王五”,"你好","甲一"、进行统一管理
        //1、创建集合对象(容器)
        ArrayList<String> alist = new ArrayList<>();

        //添加元素
        alist.add("张三");
        alist.add("李四");
        alist.add("王五");
        alist.add("你好");
        alist.add("甲一");

        System.out.println("集合中存储的数据个数:"+alist.size());
        System.out.println("获取1下标的元素内容:"+alist.get(1));

        //查看集合中所有数据的内容->遍历
        //利用循环的变量控制集合的下标
        for (int i = 0; i < alist.size(); i++) {
            //通过下标获取对应的数据
            System.out.println(alist.get(i));
        }
        System.out.println("------------");

        for (int i = 0; i < alist.size(); i++) {
            String str = alist.get(i);
            //判断 集合中每个元素是否包含“三”,是-打印输出内容
            if (str.contains("三")) {
                System.out.println(alist.get(i));
            }
            //判断是否姓李
            if (str.startsWith("李")){
                System.out.println(alist.get(i));
            }
        }

        alist.remove(3);//把下标为3的“你好”给移除了
        System.out.println("-----------");
        //使用增强for循环遍历(也称为forEach循环)
        for (String s : alist) {
            System.out.println(s);
        }
    }



运行结果为:
    集合中存储的数据个数:5
    获取1下标的元素内容:李四
    张三
    李四
    王五
    你好
    甲一
    ------------
    李四
    -----------
    张三
    李四
    王五
    甲一

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值