当前位置: 首页 > article >正文

11.Java基础概念-ArrayList

欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。

Facts speak louder than words!


        ArrayList是Java中的一个类,它实现了List接口,是基于动态数组的数据结构。它可以自动扩展以容纳任意数量的元素,并允许随机访问元素。ArrayList是使用数组实现的,所以它具有数组的优点,如随机访问快速,但也有一些缺点,如插入和删除元素时的性能较差。

以下是ArrayList的一些重要特性和用法:

1.自动扩容:当向ArrayList中添加元素时,如果当前容量不足,它会自动增加容量以容纳新元素。这个过程是通过创建一个更大的数组,并将原始数组中的元素复制到新数组中来实现的。根据下面源代码,可以看出数组的默认长度为10。

/**
 * Default initial capacity.
 */
private static final int DEFAULT_CAPACITY = 10;

private static int calculateCapacity(Object[] elementData, int minCapacity) {
        if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
            return Math.max(DEFAULT_CAPACITY, minCapacity);
        }
        return minCapacity;
}

2.随机访问:ArrayList允许通过索引来访问元素。通过调用get(int index)方法,可以获取指定位置的元素。由于ArrayList是基于数组实现的,所以在访问指定位置的元素时速度很快,时间复杂度为O(1)。

public static void main(String[] args) {
        ArrayList<Integer> = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(1);
        list.add(2);
        //获取1下标的元素
        System.out.println(list.get(1));//2
        //设置0下标的元素为2
        System.out.println(list.set(0, 2));//1
        //判断集合中是否存在元素5
        System.out.println(list.contains(5));//false
        //返回第一个2出现的位置
        System.out.println(list.indexOf(2));//0
        //返回最后一次出现2的位置
        System.out.println(list.lastIndexOf(2));//4

        //截取0~3位置的元素
        List<Integer> sub = list.subList(0,3);
        System.out.println(sub.toString());// [2, 2, 3]
        System.out.println(list.toString());// [2, 2, 3, 1, 2]
    }

3.动态添加和删除元素:ArrayList提供了一系列的方法来添加和删除元素。可以使用add(E element)方法在列表的末尾添加元素,也可以使用add(int index, E element)方法在指定位置插入元素。可以使用remove(int index)方法删除指定位置的元素,也可以使用remove(Object obj)方法删除指定的元素。

public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(2);//尾插2
        System.out.println(list.toString());// [2]
        list.add(0,1);//0下标插入1
        System.out.println(list.toString());// [1, 2]

        //Collection接口的子类
        List<Integer> list2 = new LinkedList<>();
        list2.add(3);
        list2.add(4);

        list.addAll(list2);//将list2集合中的元素尾插到list中
        System.out.println(list.toString());// [1, 2, 3, 4]
        list.addAll(1,list2);//将list2集合中的元素从1下标插入list中
        System.out.println(list.toString());// [1, 3, 4, 2, 3, 4]
    }
public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(2);
        list.add(1);

        //删除下标为0的元素,并返回该元素
        int n = list.remove(0);
        System.out.println(n);// 1
        System.out.println(list.toString());// [2, 3, 2, 1]

        //删除第一个2
        //通过显示装箱,将2数字包装成对应的包装类
        boolean result = list.remove(new Integer(2));
        System.out.println(result);// true
        System.out.println(list.toString());// [3, 2, 1]

        //清空元素
        list.clear();
        System.out.println(list.toString());// []
    }

 

4.遍历元素:可以使用for循环迭代器来遍历ArrayList中的元素。使用for循环时,可以通过调用size()方法来获取列表的大小,然后使用get(int index)方法来获取每个元素。使用迭代器时,可以调用iterator()方法来获取迭代器对象,并使用hasNext()和next()方法来遍历元素。

        ArrayList<Integer> arrayList = new ArrayList<>();
        arrayList.add(1);
        arrayList.add(2);
        arrayList.add(3);
        //打印一:for
        for (int i = 0; i < arrayList.size(); i++) {
            System.out.print(arrayList.get(i)+" ");
        }

        //打印二:foreach
        for (Integer x : arrayList) {
            System.out.print(x + " ");
        }
        System.out.println();

        //打印三:迭代器
        //默认是从 0 下标开始打印
        System.out.println("===Iterator===");
        Iterator<Integer> it =  arrayList.iterator();//创建迭代器
        while (it.hasNext()) {
            System.out.print(it.next() +" ");
        }
        System.out.println();
 
        System.out.println("===listIterator倒着打印===");
        //从 指定位置 开始打印     list1.size()
        ListIterator<Integer> it2 =  arrayList.listIterator(arrayList.size());
        while (it2.hasPrevious()) {
            System.out.print(it2.previous() +" ");
        }
        System.out.println();

5.泛型支持:ArrayList是一个泛型类,可以指定存储在其中的元素类型。这可以增加代码的类型安全性,并且在编译时可以更好地检测错误。

6.可以存储任意类型的元素:ArrayList可以存储任何类型的对象,包括基本数据类型的包装类,如Integer和Double。

总结起来,ArrayList是一个可变大小的数组,它提供了高效的随机访问和动态添加/删除元素的功能。使用ArrayList可以方便地操作和管理大量的数据。但是需要注意的是,由于ArrayList是基于数组实现的,所以在频繁插入和删除元素时性能较低,这时应该考虑使用LinkedList等其他数据结构。

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥The road is long and the line is coming,让我们一起加油吧!🌙🌙🌙


http://www.kler.cn/a/297889.html

相关文章:

  • 电压跟随器的作用是什么?
  • 【redis】认识redis和分布式系统
  • EasyExcel的导入与导出及在实际项目生产场景的一下应用例子
  • 上交团队发布PathoDuet:面向HE和IHC病理切片的自监督学习基础模型|文献精析·24-09-09
  • AIGC 初识 GAN(Generative Adversarial Networks,生成对抗网络)是如何工作的,浅记。
  • 2414. Length of the Longest Alphabetical Continuous Substring
  • CTK框架(七):事件监听
  • STM32 HAL DMA 中断碰到的问题
  • OpenGL Texture C++ 预览Camera视频
  • HTML生日蛋糕
  • 数据分析-17-时间序列分析的平稳性检验
  • .NET 一款免安装运行Python的渗透工具
  • UE驻网失败问题(三)
  • 设计模式 20 状态模式
  • pytest压力测试:不断发送数据,直到发现数据丢失
  • Linux脚本实现自动化运维:系统自动备份、资源监控
  • C++_17_友元
  • Docker 部署 Seata (图文并茂超详细)
  • (postman)接口测试进阶实战
  • 理想汽车嵌入式面试及参考答案