我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java新手教程之ArrayList的基本使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java新手教程之ArrayList的基本使用

1.简介

ArrayList 是一个数组队列,相当于 动态数组。与Java中的数组相比,它的容量能动态增长。它继承于AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口。

ArrayList 继承了AbstractList,实现了List。它是一个数组队列,提供了相关的添加、删除、修改、遍历等功能。

ArrayList 实现了RandmoAccess接口,即提供了随机访问功能。RandmoAccess是java中用来被List实现,为List提供快速访问功能的。在ArrayList中,我们即可以通过元素的序号快速获取元素对象;这就是快速随机访问。稍后,我们会比较List的“快速随机访问”和“通过Iterator迭代器访问”的效率。

ArrayList 实现了Cloneable接口,即覆盖了函数clone(),能被克隆。

ArrayList 实现java.io.Serializable接口,这意味着ArrayList支持序列化,能通过序列化去传输。

和Vector不同,ArrayList中的操作不是线程安全的!所以,建议在单线程中才使用ArrayList,而在多线程中可以选择Vector或者CopyOnWriteArrayList。

ArrayList是实现List接口的,底层采用数组实现。

ArrayList 实现了Cloneable接口,即覆盖了函数clone(),能被克隆。

ArrayList 实现java.io.Serializable接口,这意味着ArrayList支持序列化,能通过序列化去传输。

方法:

2. 方法解释

(1)contains(Object o)

说明:判断该ArrayList中是否包含指定的内容。该方法内部调用indexOf(),如果indexOf()可以查找到该内容返回true,否则返回false。

注意:记得也要重写自定义类型的equals()方法。


    private static void Test_contains(){
        Persion p1 = new Persion("张三");
        Persion p4 = new Persion("张12三");
        Persion p2 = new Persion("张三3");
        Persion p3 = new Persion("张三3");

        ArrayList<Persion> list = new ArrayList<>();
        list.add(p1);
        list.add(p4);
        list.add(p2);

        System.out.println(list.contains(new Persion("张12三")));
    }

(2)lastIndexOf(Object o)

说明:查找给定元素最后一次的位置。也就是说 倒序查找该ArrayList中第一次出现给定元素的位置。存在返回具体的位置,不存在返回-1。

实现:内容采用倒序遍历Object[]方式进行查找。

注意:与indexOf(Object o)方法描述的注意点一样,都需要重写自定义类型的equals()方法。


    private static void Test_laseIndexOf(){
        Persion p1 = new Persion("张三");
        Persion p2 = new Persion("张12三");
        Persion p3 = new Persion("张三3");
        Persion p4 = new Persion("张三");
        Persion p5 = new Persion("张三3");

        ArrayList<Persion> list = new ArrayList<>();
        list.add(p1);
        list.add(p2);
        list.add(p3);
        list.add(p4);
        list.add(p5);

        System.out.println(list.lastIndexOf(new Persion("张三")));
    }

(3) toArray()

说明:以Object[]形式返回ArrayList中存储的数据元素。

实现:返回的Object[]是采用Arrays.copyOf()(实际采用System.arraycopy())方式生成的一个"新数组"。

注意点:返回的Object[]中的数据应该是采用“浅拷贝”方式复制出来的。(也就是说,修改Object[]中元素的内容,ArrayList的内容也会发生改变)


private static void Test_toArray(){
        Persion p1 = new Persion("张三");
        Persion p2 = new Persion("张12三");
        Persion p3 = new Persion("张三3");
        Persion p4 = new Persion("张三");
        Persion p5 = new Persion("张三3");

        ArrayList<Persion> list = new ArrayList<>();
        list.add(p1);
        list.add(p2);
        list.add(p3);
        list.add(p4);
        list.add(p5);

        Object[] array = list.toArray();
        System.out.println(Arrays.toString(array));

        ((Persion)array[0]).name = "0000000";
        ((Persion)array[2]).name = "2222222";

        System.out.println(Arrays.toString(list.toArray()));
    }

(4)toArray(T[] a)

说明:以给定的类型数组形式,返回ArrayList中存储的数据元素。

注意:

  • 1:返回的Object[]中的数据应该是采用“浅拷贝”方式复制出来的。(也就是说,修改Object[]中元素的内容,ArrayList的内容也会发生改变)
  • 2:如果给定的数组类型与ArrayList存储的元素类型不匹配的话(给定的类型要是List中存储数据类型的父类型或者其本分),则会抛出"ArrayStoreException"。

原因:System.arraycopy()在做数组拷贝时,如果发现类型不匹配时就会抛出ArrayStoreException。


    private static void Test_toArray2(){
        Persion p1 = new Persion("张三");
        Persion p2 = new Persion("张12三");
        Persion p3 = new Persion("张三3");
        Persion p4 = new Persion("张三");
        Persion p5 = new Persion("张三3");

        ArrayList<Persion> list = new ArrayList<>();
        list.add(p1);
        list.add(p2);
        list.add(p3);
        list.add(p4);
        list.add(p5);

        AbsPersion[] array = list.toArray(new AbsPersion[]{});
        System.out.println(Arrays.toString(array));
    }

(5)remove(Object o)

说明:删除ArrayList中与给定的元素“相等”的且第一次出现的元素。

注意:与indexOf(Object o)方法描述的注意点一样,都需要重写自定义类型的equals()方法。


private static void Test_remove(){
        Persion p1 = new Persion("张三");
        Persion p2 = new Persion("张12三");
        Persion p3 = new Persion("张三3");
        Persion p4 = new Persion("张三");
        Persion p5 = new Persion("张三3");

        ArrayList<Persion> list = new ArrayList<>();
        list.add(p1);
        list.add(p2);
        list.add(p3);
        list.add(p4);
        list.add(p5);

        list.remove(new Persion("张12三"));
        System.out.println(Arrays.toString(list.toArray()));
    }

(6)removeAll(Collection<?> c)

说明:从当前ArrayList中删除指定集合中包含的所有元素。也就是说此方法会从ArrayList中删除其与给定集合的“相交”的数据。


private static void Test_removeAll(){
        Persion p1 = new Persion("张三");
        Persion p2 = new Persion("张三");
        Persion p3 = new Persion("李四");

        ArrayList<Persion> list = new ArrayList<>();
        list.add(p1);
        list.add(p2);
        list.add(p3);

        ArrayList<Persion> list2 = new ArrayList<>();
        list2.add(new Persion("张三"));

        list.removeAll(list2);
        System.out.println(Arrays.toString(list.toArray()));
    }

(7)retainAll(Collection<?> c)

说明:从该列表中删除未包含在指定集合中的所有元素。

也就是说此方法会移除非当前列表和给定列表共有的数据。执行此方法后,该列表只会保留下其与给定列表的“交集”数据。

可以用于求 两个列表的交集。


    private static void Test_retainAll(){
        Persion p1 = new Persion("张三");
        Persion p2 = new Persion("张三");
        Persion p3 = new Persion("李四");
        Persion p4 = new Persion("王五");

        ArrayList<Persion> list = new ArrayList<>();
        list.add(p1);
        list.add(p2);
        list.add(p3);
        list.add(p4);

        ArrayList<Persion> list2 = new ArrayList<>();
        list2.add(new Persion("张三"));

        list.retainAll(list2);
        System.out.println(Arrays.toString(list.toArray()));
    }

(8)indexOf(Object o)

说明:返回ArrayList中第一次出现给定值的数组下标。如果不存在返回-1。

注意:

  • 1:如果ArrayList中存储的是自定义类型,需要重写equals()方法,indexOf()内部会调用自定义类的equals()来判断要查找的内容与其中存储的数据元素是否“相等”。
  • 2:如果不重写equals()方法,则只有给定值的内存地址与ArrayList中的数据元素相等时,才能返回其在ArrayList存储的位置,就算内容一致也会返回-1标记ArrayList不存在给定内容。
  • 3:“相等”这个概念不仅表示两个对象的内存地址一样,还代表他们的“内容”相同。

    private static void Test_indexOf(){
        Persion p1 = new Persion("张三");
        Persion p4 = new Persion("张12三");
        Persion p2 = new Persion("张三3");
        Persion p3 = new Persion("张三3");

        ArrayList<Persion> list = new ArrayList<>();
        list.add(p1);
        list.add(p4);
        list.add(p2);

        System.out.println(list.indexOf(new Persion("张12三")));
    }
    .......
    private static class Persion{

        String name;

        public Persion(String name) {
            this.name = name;
        }

        @Override
        public boolean equals(Object obj) {
            //Object的equals()默认实现是:采用“this==obj”来比较 “当前对象与给定对象指向的内存地址是否一致”。
            //如果List中的元素不是String,Integr这些系统提供的类的话(这些系统类都重写了equals()),需要重写equals()方法。
            //为什么要重写??如果不重写,当调用List的提供的系统方法时(例如indexOf()),这些方法可能会调用给定对象的equals()
            //来做相应判断,如果给定的对象的内容相同但是对象在内存的存储地址不同时,则会出现判断错误情况。

            if(obj == null){
                return false;
            }

            if(this == obj){
                return true;
            }

            if(obj instanceof Persion){
                Persion p = (Persion) obj;
                if(p.name == this.name){
                    return true;
                }

                if(p.name == null || this.name == null){
                    return false;
                }

                if(p.name.equals(this.name)){
                    return true;
                }
            }

            return false;
        }
    }

总结

到此这篇关于Java新手教程之ArrayList基本使用的文章就介绍到这了,更多相关Java ArrayList使用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java新手教程之ArrayList的基本使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java过滤器Filter的基本使用教程

过滤器通常对一些web资源进行拦截,做完一些处理器再交给下一个过滤器处理,直到所有的过滤器处理器,再调用servlet实例的service方法进行处理。本文将通过示例为大家讲解Java中过滤器Filter的用法与实现,需要的可以参考一下
2023-02-22

超详细MySQL安装及基本使用教程(新手小白必看)

这篇教程详细地介绍了 mysql 数据库的安装和基本使用,专为数据库新手小白而写。教程从头开始,指导读者逐步完成 mysql 的安装,并涵盖基本操作,如数据库创建、表管理、数据操作和查询。无论你是数据库初学者还是想了解 mysql 基础知识
超详细MySQL安装及基本使用教程(新手小白必看)
2024-10-17

uni-app的基本使用教程

uni-app​​​是一个使用​ ​Vue.js​​开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、H5、以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉)等多个平台,这篇文章主要介绍了uni-app的基本使用,需要的朋友可以参考下
2022-11-16

hansontable在vue中的基本使用教程

handsontable是目前在前端界最接近excel的插件,可以执行编辑,复制粘贴,插入删除行列,排序等复杂操作,这篇文章主要介绍了hansontable在vue中的基本使用,需要的朋友可以参考下
2022-11-13

Vue webpack的基本使用示例教程

这篇文章主要介绍了Vue webpack的基本使用,本文结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2022-12-22

Java集合Stream流操作的基本使用教程分享

流操作并不会影响原来的集合,可以简单认为,流操作是把集合中的一个元素逐个复制放到一个首尾相接的流动的水槽中。这篇文章整理了Stream流操作的基本使用,需要的可以参考一下
2023-02-21

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录