容器中的单例集合(二)——List接口的实现类之ArrayList

        根据接口的定义我们知道,接口的作用是定义标准或者规定,要满足接口中的要求就需要定义一个实现类来实现接口中定义的标准。List接口的常用实现类有ArrayList、Vector、Stack以及LinkedList。其中ArrayList类是较为基础的一个实现类,理解ArrayList类中关于容器的操作之后,对照学习其余的几个实现类是较为理想的方法。

        ArrayList的底层是通过数组来实现对容器中的集合进行操作的,因此通过实例化ArrayList类创建的对象中含有的索引必须小于容器中元素的个数。由于ArrayList中的容器中的元素含有索引,因此可以像数组一样,可以通过索引来对容器中的元素进行相关操作。

      可以通过List接口来实例化ArrayList容器,这里要注意List接口是泛型接口,在实例化时要指定泛型类型,同时List接口是java.util包下的接口,在实例化容器的时候要进行导包操作。同样的,由于ArrayList类是List接口的实现类,因此在实例化容器时也要进行相应的导包操作,这里要注意的是,在进行导包操作的时候,List接口和ArrayList类极有可能出现无法通过快捷导包的情况,这时我们可以选择手动书写导包代码,也可以在IDEA中选择设置,在设置中找到Editor选项,在这个选项下找到General,在General下有一个Auto Import选项,在这个选项里IDEA自动禁用了java.util.list的快捷键导包操作,我门只要在窗口中选中java.util.list随后在边框周围找到一个减号,点击它将这个java.util.list在禁用导包目录中删除即可通过快捷键Alt+Enter进行导包操作,具体操作如下图所示。

 

         实例化ArrayList容器之后,我们就可以通过对象名来调用ArrayList中的方法了。ArrayList类不仅实现了Collection中的抽象方法,而且由于它是List接口的实现类,因此它还实现了List接口中新增加的通过索引对容器中的元素操作的方法。这些方法的使用在下面的演示代码中做了示范。在这些方法中要注意的是对元素进行删除操作时有两个方法——T remove(index)和 boolean remove(element)。这两个方法看上去很好区分,但是在使用时会产生混淆,前一个方法是对指定索引的元素进行删除操作,但是会返回被删除的元素的值,因此它的返回值类型是根据定义的容器的元素的类型发生变化的,可以理解为一个泛型方法,第二个方法用于删除指定的元素,返回的是一个boolean类型的值,它是一个普通方法。

        此外,其余的常用方法中还要注意的是替换方法set,这个方法要传入两个参数,一个是要替换的元素的索引,一个替换之后的内容。这个方法执行以后会返回一个被替换的元素,在使用的时候要注意它的返回值类型。

        ArrayList类中实现了Collection中的addAll、retainAll以及removeAll方法,这三个方法是用来对两个不同的集合进行操作,addAll进行并集操作,retainAll进行交集操作,removeAll进行差集操作。这三个操作可以类比到数学中的集合的交、并、补的运算,但是二者只见是存在差异的。        

        java中不同容器之间的操作有以下几点要注意:

        1、并集操作addAll只能在同类型的容器间进行,也就是说,进行并集操作的两个容器在定义时它们的泛型必须是一样的,显然,其余的两个操作交集操作和差集操作也是一样的;

        2、进行交集操作,并集操作以及差集操作的两个容器均不能为空;

        3、进行交集操作时,两个容器不能是包含关系,也就是说其中一个容器不能是另一个容器的子集;

        4、如果对容器a和容器b进行差集操作(a-b),b容器可以不是a容器的子集,在进行差集操作的时候,只在a容器中删除b容器中与a容器中相同的元素,b容器中多余的元素不计入差集操作结果。比如a容器为:1 2 3 6 5,b容器为1 3 j,那么运算结果应为:2 6 5 。这点与数学中的补集运算极为不同,不要将二者混淆。

package com.container.demo;



import java.util.List;
import java.util.ArrayList;
import  java.util.Arrays;

public class ArrayListTest {
    public static void main(String[] args) {
        //实例化ArrayList容器
        List<String> list = new ArrayList<>();
        //添加元素
        boolean flag = list.add("北京尚学堂");
        boolean flag1 = list.add("itbz");
        System.out.println(flag);
        System.out.println(flag1);
        //索引的数值不能大于等于元素个数
        list.add(1,"laolu");

        System.out.println(list.get(0));
        System.out.println("_________________");

        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        System.out.println("_____________________");

        //根据索引删除元素
        String re = list.remove(0);//删除指定位置的元素,并且返回该位置原来的元素,即返回删除的元素的值
        System.out.println("删除的元素是:"+re);
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        System.out.println("_________________________");

        //删除指定元素
        boolean bo = list.remove("laolu");//删除指定元素,返回一个boolean值,用于判断是否删除成功,接口Collection中的方法
        System.out.println("是否删除成功:"+bo);
        boolean bo1 = list.remove("haha");
        System.out.println("是否删除成功:"+bo1);
        for (String aa:list
             ) {
            System.out.println(aa);
        }

        //替换容器中的元素
        list.add("beijing");
        list.add("shanghai");
        list.add("hebei");
        for (String bb:list
             ) {
            System.out.print(bb+"\t");
        }System.out.println();

        String t1 = list.set(1,"首都:北京");//替换指定位置的元素,并返回被替换的元素
        System.out.println("被替换的元素为:"+t1);
        for (int i = 0; i < list.size(); i++) {
            System.out.print(list.get(i)+"\t");
        }
        System.out.println();

        //清空容器
        list.clear();
        System.out.println(list.size());
        //判断容器是否为空
        System.out.println(list.isEmpty());
        System.out.println("_________________________");

        //判断容器中是否包含某个指定元素
        list.add("beijing");
        list.add("shanghai");
        list.add("hebei");
        boolean be1 = list.contains("beijing");
        boolean be2 = list.contains("haha");
        System.out.println(be1);
        System.out.println(be2);

        //查找元素位置
        list.add(2,"beijing");
        list.add(0,"shanghai");
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        System.out.println("——————————————————————————————————");

        //查找元素第一次出现的位置
        int ind = list.indexOf("beijing");
        System.out.println("beijing第一次出现的位置索引为:"+ind);
        //查找元素最后一次出现的位置
        int ind1 = list.lastIndexOf("beijing");
        int ind2 = list.lastIndexOf("bei");
        System.out.println("beijing最后出现的位置索引为:"+ind1);
        System.out.println(ind2);//如果元素不存在,则返回-1
        System.out.println("___________________________________");

        //将单例集合转换为数组
        //将单例集合转换为Object [],但是不能对转换的数组做强制类型转换
        Object[] arr01 = list.toArray();
        System.out.println(Arrays.toString(arr01));
        for (Object ob:arr01
             ) {
            System.out.print(ob+"\t");
        }
        System.out.println();
        //将单例集合转换为致指定类型的数组,但是类型需要参考泛型中的类型
        String[] arr02 = list.toArray(new String[list.size()]);
        System.out.println(Arrays.toString(arr02));

        System.out.println("___________-容器的并集操作-_______");
        List<String> a = new ArrayList<>();
        List<String> b = new ArrayList<>();
        a.add("1");
        a.add("2");
        a.add("3");
        System.out.println("并集操作前的a:");
        for (int i = 0; i < a.size(); i++) {
            System.out.print(a.get(i)+"\t");
        }
        System.out.println();
        b.add("a");
        b.add("b");
        b.add("c");
        System.out.println("集合b的内容:");
        for (int i = 0; i <b.size() ; i++) {
            System.out.print(b.get(i)+"\t");
        }
        System.out.println();

        boolean flag6 = a.addAll(b);//a并b结果赋给a。并集必须同类型,且并集操作不能含有空集
        System.out.println("并集操作是否成功"+flag6);
        System.out.println("并集操作后的a:");
        for (int i = 0; i < a.size(); i++) {
            System.out.print(a.get(i)+"\t");
        }
        System.out.println();

        System.out.println("-------容器的交集操作-----------");
        List<String> a1 = new ArrayList<>();
        a1.add("1");
        a1.add("3");
        a1.add("f");
        System.out.println("交集操作前的a1");
        for (int i = 0; i < a1.size(); i++) {
            System.out.print(a1.get(i)+"\t");
        }
        System.out.println();

        boolean flag7 = a1.retainAll(a);//a1不能是a的子集,交集操作失败
        System.out.println("交集操作是否成功:"+flag7);
        System.out.println("交集操作后的a1:");
        for (int i = 0; i < a1.size(); i++) {
            System.out.print(a1.get(i)+"\t");
        }
        System.out.println();

        System.out.println("--------容器的差集操作--------");
        a1.add("f");
        System.out.println("差集操作前的a:");
        for (int i = 0; i < a.size(); i++) {
            System.out.print(a.get(i)+"\t");
        }
        System.out.println();
        System.out.println("差集操作前的a1:");
        for (int i = 0; i < a1.size(); i++) {
            System.out.print(a1.get(i)+"\t");
        }
        System.out.println();
        boolean flag8 = a.removeAll(a1);
        System.out.println("差集操作是否成功:"+flag8);
        System.out.println("差集操作后的a:");
        for (int i = 0; i < a.size(); i++) {
            System.out.print(a.get(i)+"\t");
        }
    }
}

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/615599.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

xilinx xdma drive 传输8MB以上数据受限的问题

当传输超过8 MB数据时报错error code1359&#xff0c; #define XDMA_MAX_TRANSFER_SIZE (8UL * 1024UL * 1024UL) 可以修改成&#xff1a; #define XDMA_MAX_TRANSFER_SIZE (80UL * 1024UL * 1024UL) VS2019 WDK环境的搭建 先准备好VS WDK的驱动开发环境。需要下载VS、SD…

2024年4月24日华为春招实习试题【三题】-题目+题解+在线评测,2024.4.24,华为机试

2024年4月24日华为春招实习试题【三题】-题目题解在线评测&#xff0c;2024.4.24&#xff0c;华为机试 &#x1f3e9;题目一描述&#xff1a;输入格式输出格式样例1样例2样例3数据范围解题思路一&#xff1a;dfs解题思路二&#xff1a;直接二分查找哇&#xff01;解题思路三&am…

XMind 2023 v23.05.2660软件安装教程(附软件下载地址)

软件简介&#xff1a; 软件【下载地址】获取方式见文末。注&#xff1a;推荐使用&#xff0c;更贴合此安装方法&#xff01; XMind 2023 v23.05.2660被视为顶尖思维导图软件&#xff0c;其界面简洁清爽&#xff0c;功能布局直观简单&#xff0c;摒弃繁复不实。尽管体积小巧&a…

OSError: [WinError 1455] 页面文件太小,无法完成操作 的问题

实质问题是报错&#xff1a;caffe2_detectron_ops.dll“ or one of its dependencies 还需要安装一个包&#xff1a; pip install intel-openmp 安装之后顺利测试通过。

怎么把图片改成1920*1080的?一键修改图片尺寸小技巧

一张合适尺寸的图片&#xff0c;不仅可以适应不同设备的屏幕尺寸&#xff0c;保证视觉效果的舒适和协调&#xff0c;还可以有效降低图片的存储空间占用&#xff0c;比如我们有时候想要把一张图片改成1920*1080尺寸的&#xff0c;该如何修改图片尺寸呢&#xff1f;其实可以使用图…

一文弄懂Pytest——fixture用法

&#x1f49f;&#x1f49f;前言 ​ 友友们大家好&#xff0c;我是你们的小王同学&#x1f617;&#x1f617; 今天给大家打来的是 一文弄懂Pytest——fixture用法 希望能给大家带来有用的知识 觉得小王写的不错的话麻烦动动小手 点赞&#x1f44d; 收藏⭐ 评论&#x1f4c4; 小…

[GESP样题 四级] 填幻方和幸运数

B3940 [GESP样题 四级] 填幻方 题目 在一个NN 的正方形网格中&#xff0c;每个格子分别填上从 1 到 NN 的正整数&#xff0c;使得正方形中任一行、任一列及对角线的几个数之和都相等&#xff0c;则这种正方形图案就称为“幻方”&#xff08;输出样例中展示了一个33 的幻方&am…

探索国外静态住宅代理:保护网络安全与隐私的利器

随着互联网的日益发展&#xff0c;网络安全和隐私保护成为越来越多用户关注的焦点。在这个信息爆炸的时代&#xff0c;如何确保网络活动的匿名性和安全性成为了我们必须面对的问题。国外静态住宅代理作为一种新兴的网络技术&#xff0c;为我们提供了有效的解决方案。 &#xf…

量子波函数白话解释

关键词&#xff1a;Quantum Wave Function 文章目录 一、说明二、什么是波函数&#xff1f;三 量子波的可视化四、量子波的概率解释 一、说明 在量子力学中&#xff0c;粒子是我们只有在测量它们时才能看到的东西。其中运动模式由满足薛定谔方程的波函数描述。波函数并非量子…

PTP 对时协议 IEEE1588 网络对时 计算原理

前言 本文将阐述 PTP 对时协议的原理&#xff0c;slave 节点如何根据获取的时间来纠正和更新自己的时间。 协议概述 整个通讯过程中会发送 4 种类型的数据包&#xff0c;用来支撑对时。下面是 4 个包的解释 Sync message: 由 master 发送&#xff0c;发起对时事务, slave 接…

Chromium编译指南2024 Windows11篇-Git工具准备(四)

前言 在《Chromium编译指南2024&#xff08;三&#xff09;》中&#xff0c;我们已经完成了对 Chromium 编译环境的其他相关环境变量的设置&#xff0c; 接下来&#xff0c;我们将进一步探讨如何初始化配置 Git&#xff0c;为获取 Chromium 源代码做好准备。 1. 配置Git 用户…

数据结构与算法学习笔记三---队列的链式存储表示和实现(C++)

目录 前言 1.队列的概念 2.队列的表示和实现 1.定义 2.初始化 ​编辑 3.销毁队列 4.清空队列 5.队列判空 6.队列长度 7.获取队头元素 8.入队 9.出队 10.遍历 11.完整代码 前言 这篇博客主要讲的是对队列的链式存储。 1.队列的概念 队列是一种访问受限的线性表。…

win11安装各银行的网银助手都无法打开,双击没反应?

大神贴 右键网银助手属性&#xff0c;在目标后面敲一下空格&#xff0c;输入**-runapp**&#xff0c;应用即可。 如图示例&#xff1a;

推荐一个开源的MES系统

软件介绍 HM-MES是一款旨在帮助工厂实现生产计划、工艺管理和质量控制的工业生产管理软件。该软件基于Java Web技术和MySql数据库开发&#xff0c;拥有简洁、易用、安全和稳定等特点&#xff0c;适用于广泛的生产管理场景。 功能描述 1.产品和原材料双向溯源&#xff0c;支持二…

鸿蒙内核源码分析(远程登录篇) | 内核如何接待远方的客人

什么是远程登录? 每个人都有上门做客的经历,抖音也一直在教我们做人,做客不要空手去,总得带点东西,而对中国人你就不能送钟,不能送梨,最好也别送鞋,因他们与 终 离 邪 谐音,犯忌讳. 这是人情世故,叫礼仪,是中华文明圈的共识,是相互交流信任的基础. 那互联网圈有没有这种共识呢…

内网渗透之如何批量PTH获取主机权限?

—— 利用CrakMapExec工具进行全网段批量PTH CrackMapExec&#xff08;CME&#xff09;是一款后渗透利用工具&#xff0c;可帮助自动化大型活动目录(AD)网络安全评估任务。其缔造者byt3bl33d3r称&#xff0c;该工具的生存概念是&#xff0c;“利用AD内置功能/协议达成其功能&…

SpringBoot实现图片验证码

引入依赖 <dependency><groupId>com.github.whvcse</groupId><artifactId>easy-captcha</artifactId><version>1.6.2</version> </dependency>代码实现 package com.qiangesoft.captcha.controller;import com.wf.captcha.*…

实体同城商家短视频获客,3天直播课,玩转实体商家私域,引爆门店增长

课程内容&#xff1a; 实体同城3天直播课【资料】 实体商家获客第一天 .mp4 实体商家获客第二天上.mp4 实体商家获客第二天,mp4 实体商家获客第三天.mp4 实体商家获客第4天.mp4 网盘自动获取 链接&#xff1a;https://pan.baidu.com/s/1lpzKPim76qettahxvxtjaQ?pwd0b8x…

暗区突围PC测试资格 暗区突围PC端测试资格获取教程

《暗区突围》的横空出世&#xff0c;犹如一颗震撼弹投入了游戏圈&#xff0c;它不仅颠覆了传统射击游戏的框架&#xff0c;更以独特的撤离生存机制和深度的装备打造系统&#xff0c;激发了无数玩家的探险欲和竞技精神。在这个由精密设计的地图和复杂多变的战术构成的虚拟舞台中…

HTTP超时时间设置

在进行超时时间设置之前我们需要了解一次http请求经历的过程 浏览器进行DNS域名解析&#xff0c;得到对应的IP地址根据这个IP&#xff0c;找到对应的服务器建立连接&#xff08;三次握手&#xff09;建立TCP连接后发起HTTP请求&#xff08;一个完整的http请求报文&#xff09;服…