容器中的单例集合(二)——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);//如果元素不存在,则返回-1System.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");}}
}

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Unity Shader入门精要 第6章】基础光照(一)

1. 什么是光照模型 光照原理 在真实世界中&#xff0c;我们能够看到物体&#xff0c;是由于眼睛接收到了来自观察目标的光。这里面包括两种情况&#xff1a;一部分是观察目标本身发出的光&#xff08;自发光&#xff09;直接进入我们的眼睛&#xff0c;另一部分是其他物体&am…

数字社交风潮:解析Facebook的影响力

随着互联网的普及和科技的发展&#xff0c;数字社交媒体已经成为现代社会不可或缺的一部分。在众多的社交媒体平台中&#xff0c;Facebook作为其中的佼佼者&#xff0c;影响着数以亿计的用户。本文将深入解析Facebook的影响力&#xff0c;探讨其在数字社交风潮中的地位和作用。…

springcloud alibaba微服务框架涉及的技术

一、微服务架构中核心模块及其使用技术总览 二、各模块详细说明 1、注册中心 该模块主要功能为 自动提供服务的注册与发现&#xff0c;集中式管理服务&#xff0c;让 服务调用端发现服务&#xff0c;让服务提供端注册服务&#xff0c;倘若没有注册中心&#xff0c;那客户端就…

【Java基础】初识正则表达式

正则表达式只适用于字符串 匹配matches 实际使用的是String类中定义的方法boolean matches(String regex) public static void piPei( ){String regex"[1][356789]\\d{9}";boolean boo"14838384388".matches(regex);System.out.println(boo); }验证qq号…

前后端完全开源!功能丰富的在线教室项目:Agora Flat

Agora Flat&#xff1a;高效集成的在线教室解决方案&#xff0c;重塑互动学习新体验。- 精选真开源&#xff0c;释放新价值。 概览 Agora Flat是在GitHub平台上公开分享的一个全面开源项目&#xff0c;它精心设计为一个高性能的在线教室解决方案&#xff0c;旨在便捷地搭建支持…

政安晨:【Keras机器学习示例演绎】(四十二)—— 使用 KerasNLP 和 tf.distribute 进行数据并行训练

目录 简介 导入 基本批量大小和学习率 计算按比例分配的批量大小和学习率 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在…

Linux提权--内核漏洞--web用户提权(脏牛)本地提权(脏管道)

免责声明:本文仅做技术交流与学习... 目录 Linux-内核漏洞Web用户提权-探针&利用-脏牛dcow nmap扫描目标IP及端口 导入脚本,进行探针 通过MSF发现目标机器存在脏牛漏洞 ---上传信息搜集的文件,查找漏洞,利用漏洞,继续上传EXP. --密码改了,再用xshell连一下就行了. …

对话易参创始人黄怡然:股权能不能赋能企业增长?| 极新企服直播实录

“ 致所有爱画饼的老板 ” 整理 | 云舒 编辑 | 小白 出品&#xff5c;极新 2022年以前&#xff0c;股权激励作为企业实现增长、吸引人才、保留人才并大幅度激发人才价值的重要手段&#xff0c;几乎成为每一个企业的标配。但是&#xff0c;现在这个时代&#xff0c;股权激励几…

Python 将Excel转换为多种图片格式(PNG, JPG, BMP, SVG)

目录 安装Python Excel库 使用Python将Excel工作表转换为PNG&#xff0c;JPG或BMP图片 使用Python将Excel特定单元格区域转换为PNG&#xff0c;JPG或BMP图片 使用Python将Excel工作表转换为SVG图片 有时&#xff0c;你可能希望以图片形式分享Excel数据&#xff0c;以防止他…

基于遗传优化的双BP神经网络金融序列预测算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于遗传优化的双BP神经网络金融序列预测算法matlab仿真&#xff0c;采用的双BP神经网络结构如下&#xff1a; 2.测试软件版本以及运行结果展示 MATLAB2022A版本…

【讲解下目标追踪】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

个人微信api

简要描述&#xff1a; 退出群聊 请求URL&#xff1a; http://域名地址/quitChatRoom 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/json Authorization&#xff1a;login接口返回 参数&#xff1a; 参数名 必选 类型 …

物流EDI:GEFCO EDI 需求分析

GEFCO专注于汽车物流领域近70年&#xff0c;是欧洲整车市场的物流供应商&#xff0c;也是欧洲十大领先的运输和物流集团之一。GEFCO的业务遍及六大洲&#xff0c;业务覆盖150个国家&#xff0c;在全球拥有庞大的员工队伍&#xff0c;在全球汽车行业的挑战中茁壮成长。为汽车制造…

MySQL-索引篇

文章目录 什么是索引&#xff1f;索引的优缺点索引底层数据结构选型Hash表二叉查找树AVL树红黑树B树&B树 索引类型总结主键索引二级索引聚集索引与非聚集索引聚集索引非聚集索引 覆盖索引与关联索引覆盖索引联合查询最左前缀匹配原则 索引下推如何正确使用索引选择合适的字…

iOS Xcode Debug View Hierarchy 查看视图层级结构

前言 我们难免会遇到接手别人项目的情况&#xff0c;让你去改他遗留的问题&#xff0c;想想都头大&#xff0c;&#x1f602;可是也不得不面对。作为开发者只要让我们找到出问题的代码文件&#xff0c;我们就总有办法去解决它&#xff0c;那么如何快速定位问题对应的代码文件呢…

r语言数据分析案例-北京市气温预测分析与研究

一、选题背景 近年来&#xff0c;人类大量燃烧煤炭、天然气等含碳燃料导致温室气 体过度排放&#xff0c;大量温室气体强烈吸收地面辐射中的红外线&#xff0c;造 成温室效应不断累积&#xff0c;使得地球温度上升&#xff0c;造成全球气候变暖。 气象温度的预测一直以来都是…

python视频转码脚本

今天有一个临时的需求&#xff0c;就是需要将一个wmv的初步转码成mp4的格式。找了一圈&#xff0c;免费的工具少&#xff0c;即使有免费的工具&#xff0c;在功能上也是有所限制&#xff0c;或者会给你塞广告或者附带安装其它流氓小游戏或者杀毒程序。 我并非不支持正版&#…

前端笔记-day05

文章目录 01-结构伪类选择器02-结构伪类选择器-公式用法03-伪元素选择器04-盒子模型-组成05-盒子模型-边框线06-盒子模型-单方向边框线07-盒子模型-内边距08-盒子模型-padding多值写法09-盒子模型-尺寸计算10-盒子模型-版心居中11-清除默认样式12-元素溢出overflow13-外边距合并…

贪心算法-----柠檬水找零

今日题目&#xff1a;leetcode860 题目链接&#xff1a;点击跳转题目 分析&#xff1a; 顾客只会给三种面值&#xff1a;5、10、20&#xff0c;先分类讨论 当收到5美元时&#xff1a;不用找零&#xff0c;面值5张数1当收到10美元时&#xff1a;找零5美元&#xff0c;面值5张数…

3588 pwm android12 的操作

问题&#xff1a; 客户需要在android12 的界面上操作板卡上的 PWM 蜂鸣器设备。 过程&#xff1a; 1 了解一下 3588 android12 源码的 关于PWM 的驱动。 设备树找不到 pwm 但是&#xff0c; 还不知道&#xff0c;android12 最终包含的 设备树是哪个&#xff0c;但是经过我的…