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

JAVA泛型和顺序表ArrayList

 

目录

泛型

        泛型的定义:

        泛型的实例化:

         泛型的使用:

        顺序表ArrayList

        顺序表ArrayList的两种实例化方法:

        ArrayList常用的方法:

       1. add 方法

        2. size ( ) 方法

        3. get 方法

        4. set 方法

        5. 顺序表的三种遍历元素的方法。

        for循环:

        for each :

        迭代器:

        6. add ()在指定位置添加元素

        7.删除元素:

        根据下标删除元素:

        根据元素内容删除元素:

        注意:

        8. contains 方法

        9. indexOf 方法

        10. subList 方法

        11. clear()方法


泛型

         泛型也就是适用于许多其他的类型。

        泛型可以提高代码的复用性。

        在我们之前学习的方法的重载后,发现其也不是那么的方便,因为要把方法的接收的参数重新设置,而且要是重载的方法多了,代码会变的“丑”,java所以引入了泛型来解决这一情况。所以为什么说泛型可以提高代码的复用性。

        

        那么,泛型怎么定义,怎么实例化,怎么使用?

        

        泛型的定义:

        

         这里我们就创建了一个泛型类。

        注意:

        1.要在类名后加上 " < > " ,而其里面名字 " T " 是代表到时候实例化传过来的数据类型。 

        2.在new 一个数组对象时,因为在new 这个对象的时候,可能会涉及到调用该类的构造方法,T 是什么类型还不知道,构造方法实现不了。所以,要先通过 Object 类型来开辟空间,再通过强制类型转换成 T[ ] 数组类型。

        

        泛型的实例化:

        

         这样,我们就实例化了一个泛型。

        注意:

        在实例化中,"< >" 里面的书写。

        1.如果是基本数据类型,要使用到其对应的包装类

        2.如果是引用类型,可以直接写,比如 String ,int [ ] ,double [ ] 。

        

        包装类是 Java 为每个基本数据类型提供的对应的引用类型。基本数据类型不是对象,不具备对象的特性,如不能调用方法等。而包装类使得基本数据类型可以像对象一样被操作,基本数据类型也能够参与其中。

        

        基本数据类型对应的包装类如图:

        

        

         泛型的使用:

        

         上面的 set 方法设置和 get 提取数据打印时没问题的,但是下面的 arr.set(1,10) 这一行代码就有问题了,这里需要的是 String 类型的数据,而这里传入了一个整数类型,触发了类型检查,所以,使用泛型能更好的让我们发现错误。

        

        顺序表ArrayList

         顺序表 与 数组 其实很相似,但顺序表 实现了 List 接口List是一个接口,它定义了一系列操作顺序表的方法,例如添加元素、删除元素、获取元素、查询元素位置等。 ArrayListList接口的一个具体实现类。它实现了List接口中定义的所有方法能更好的对数据进行处理,总的来说 顺序表 比 数组 好用。

        

        顺序表ArrayList的两种实例化方法:

        

        

   要注意,使用顺序表ArrayList要导入对应的包。

   第一种实例化我们都会,但第二种实例化,使用了 List 的引用来进行接收 ArrayList 对象的示例,这也是“向上转型”。

         

 我们前面知道:

  子类实例转成父类引用 称为“向上转型”。

      把父类实例转成子类引用称为“向下转型”。

        

        使用上面的第二种实例化,后续针对 List 进行各种方法的调用,就会触发多态,调用到子类ArrayList的方法。

        

        另外,再看下面的:        

        这里的实例化的同时,指定初始化容量是元素个数,并且,顺序表是可以动态扩容的(后面也会讲到),只要机器的内存足够用,就能一直持续扩容,保证元素都能被容纳进去。(顺序表的一个核心功能)。

        

        ArrayList常用的方法:

       1. add 方法

        

List<String> arr1 = new ArrayList<>();arr1.add("aaa");arr1.add("bbb");arr1.add("ccc");System.out.println(arr1);

        打印结果:

        

         这是一个尾插的方法,先调用的add方法在前面存放,后调用的add方法继续在后面逐个插入数据。

        add方法就涉及到动态扩容了。因为开始创建顺序表的时候并没有指定容量。在使用add方法后就会动态扩容了。

        

        2. size ( ) 方法

        

 List<String> arr1 = new ArrayList<>();arr1.add("aaa");arr1.add("bbb");arr1.add("ccc");System.out.println(arr1.size());

        运行结果:

        

         size ( ) 方法是获取顺序表的元素个数。

        

        3. get 方法

        

List<String> arr1 = new ArrayList<>();arr1.add("aaa");arr1.add("bbb");arr1.add("ccc");arr1.add("ddd");System.out.println(arr1.get(0));System.out.println(arr1.get(1));System.out.println(arr1.get(2));System.out.println(arr1.get(3));

        打印结果:

        

        get 方法 可以获取 顺序表 当中对应下标的元素。

        注意:

        使用 get 方法 获取的下标不能越界。

        

        4. set 方法

        

 List<String> arr1 = new ArrayList<>();arr1.add("aaa");arr1.add("bbb");arr1.add("ccc");arr1.add("ddd");//       System.out.println(arr1.get(0));
//       System.out.println(arr1.get(1));
//       System.out.println(arr1.get(2));
//       System.out.println(arr1.get(3));arr1.set(1,"kkk");System.out.println(arr1);

        打印结果:

        

         set 方法是将顺序表对应下标的元素进行改变。

        注意:

        set 方法 设置元素的下标不能越界。

        

        5. 顺序表的三种遍历元素的方法。

        for循环:

        

 List<String> arr1 = new ArrayList<>();arr1.add("aaa");arr1.add("bbb");arr1.add("ccc");arr1.add("ddd");for (int i = 0; i < arr1.size(); i++) {System.out.println(arr1.get(i));}
        for each :

        

List<String> arr1 = new ArrayList<>();arr1.add("aaa");arr1.add("bbb");arr1.add("ccc");arr1.add("ddd");for(String s : arr1 ) {System.out.println(s);}
        迭代器:

        

 List<String> arr1 = new ArrayList<>();arr1.add("aaa");arr1.add("bbb");arr1.add("ccc");arr1.add("ddd");Iterator<String> sss = arr1.iterator();while(sss.hasNext()) {System.out.println(sss.next());}

        这个类似于之前学习的 Scanner 输入的例子。

       获取一个迭代器(Iterator),并将这个迭代器赋值给名为sss的变量。通过这个迭代器,可以方便地遍历 arr1 集合中的元素。

        

        6. add ()在指定位置添加元素

        

List<String> arr1 = new ArrayList<>();arr1.add("aaa");arr1.add("bbb");arr1.add("ccc");arr1.add("ddd");arr1.add(2,"man");System.out.println(arr1);

        打印结果:

        

         这里插入元素是 插入后的 元素的位置下标。

        在上述里例子中,如果插入的下标是 4 ,那么就相当于尾插了。

        

        7.删除元素:

        根据下标删除元素:

        

List<String> arr1 = new ArrayList<>();arr1.add("aaa");arr1.add("bbb");arr1.add("ccc");arr1.add("ddd");arr1.remove(2);System.out.println(arr1);

        打印结果:

        

         这里是删除了 2 下标的元素 “ccc” 。

        

        根据元素内容删除元素:

        

List<String> arr1 = new ArrayList<>();arr1.add("aaa");arr1.add("bbb");arr1.add("ccc");arr1.add("ddd");arr1.add("ccc");arr1.add("eee");arr1.remove("ccc");System.out.println(arr1);

        打印结果:

        

        可以看到, remove 根据内容删除元素方法 用于从列表中删除指定元素的第一个匹配项,如果要删除所有的 “ccc”,可以通过循环检查每个元素,然后在匹配时删除来实现删除所有指定元素。(这里不做演示)

        

        

        注意:
List<Integer> arr2 = new ArrayList<>();arr2.add(1);arr2.add(2);arr2.add(3);arr2.add(4);arr2.remove(2);System.out.println(arr2);

        打印结果:

         

         这里根据的是下标来删除元素的,如果想要删除元素2 应该怎么做?

        可以这样:

List<Integer> arr2 = new ArrayList<>();arr2.add(1);arr2.add(2);arr2.add(3);arr2.add(4);Integer a = 2;arr2.remove(a);System.out.println(arr2);

        打印结果:

        

         这里借助了不同类型的 两种数据 触发了不同的重载方法,实现了两种删除方式。

        基本数据类型int的值(这里的1234)会自动转换为Integer对象并添加到列表中。自动装箱机制使得代码编写更加方便,程序员不需要显式地将int转换为Integer

        

        8. contains 方法

        

 List<String> arr1 = new ArrayList<>();arr1.add("aaa");arr1.add("bbb");arr1.add("ccc");arr1.add("ddd");arr1.add("ccc");arr1.add("eee");System.out.println( arr1.contains("eee"));

        运行结果:

        

        这个方法用来判断顺序表中当前元素存不存在。

        存在返回 true,否则返回 false 。

        

        9. indexOf 方法

        

 List<String> arr1 = new ArrayList<>();arr1.add("aaa");arr1.add("bbb");arr1.add("ccc");arr1.add("ddd");arr1.add("ccc");arr1.add("eee");//返回元素第一次出现的下标位置System.out.println(arr1.indexOf("ccc"));// //返回元素最后一次出现的下标位置System.out.println(arr1.lastIndexOf("ccc"));

        打印结果:

        

         如果元素不存在,则返回 -1 

        

        

        10. subList 方法

 List<String> arr1 = new ArrayList<>();arr1.add("aaa");arr1.add("bbb");arr1.add("ccc");arr1.add("ddd");arr1.add("eee");//获取子列表 arr2List<String> arr2 = arr1.subList(1,3);//打印子列表 arr2System.out.println(arr2);//修改子列表arr2arr2.set(0,"111");//打印arr1System.out.println(arr1);

        打印结果:

        

         可以看到。

        对子列表操作,不是创建“副本”列表,而是直接取原始列表一部分进行构造的,修改子列表,就会影响到原始的列表。

        

        

        11. clear()方法

List<String> arr1 = new ArrayList<>();arr1.add("aaa");arr1.add("bbb");arr1.add("ccc");arr1.add("ddd");arr1.add("eee");//清空前System.out.println(arr1);arr1.clear();//清空后System.out.println(arr1);

        打印如果:

        

        clear 可以清空顺序表当中的元素。 

相关文章:

JAVA泛型和顺序表ArrayList

目录 泛型 泛型的定义&#xff1a; 泛型的实例化&#xff1a; 泛型的使用&#xff1a; 顺序表ArrayList 顺序表ArrayList的两种实例化方法&#xff1a; ArrayList常用的方法&#xff1a; 1. add 方法 2. size ( ) 方法 3. get 方法 4. set 方法 5. 顺序表的三种遍历元素的方法…...

Qt桌面应用开发 第六天(鼠标事件 定时器事件 定时器类 事件分发器 事件过滤器)

目录 1.1鼠标进入和离开enterEvent\leaveEvent 1.2鼠标按下释放和移动mousePressEvent\mouseReleaseEvent\mouseMoveEvent 1.3定时器事件timerEvent 1.4定时器类QTimer 1.5事件分发器event 1.6事件过滤器eventFilter 1.1鼠标进入和离开enterEvent\leaveEvent 事件&#x…...

Javascript高级—深入JS模板字符串的高级用法

深入JS模板字符串的高级用法&#xff1a;解锁动态内容生成的无限可能 在JavaScript编程中&#xff0c;模板字符串&#xff08;Template Literals&#xff09;自ES6&#xff08;ECMAScript 2015&#xff09;引入以来&#xff0c;就以其简洁、直观的特性迅速成为开发者们生成动态…...

14. 【.NET 8 实战--孢子记账--从单体到微服务】--简易权限--章节总结

本章重点介绍了如何在一个简单的系统中实现基本的权限管理功能。通过构建一个简单的权限控制模型&#xff0c;章节阐述了如何为用户分配权限&#xff0c;并在应用程序中进行访问控制。 一、关键要点&#xff1a; 1. 用户管理&#xff08;登录/注册/Token&#xff09; 本章节聚…...

vulhub之fastjson

fastjson 1.2.24 反序列化 RCE 漏洞(CVE-2017-18349) 漏洞简介 什么是json json全称是JavaScript object notation。即JavaScript对象标记法,使用键值对进行信息的存储。举个简单的例子如下: {"name":"BossFrank", "age":23, "isDevel…...

2024年亚太地区数学建模大赛D题-探索量子加速人工智能的前沿领域

量子计算在解决复杂问题和处理大规模数据集方面具有巨大的潜力&#xff0c;远远超过了经典计算机的能力。当与人工智能&#xff08;AI&#xff09;集成时&#xff0c;量子计算可以带来革命性的突破。它的并行处理能力能够在更短的时间内解决更复杂的问题&#xff0c;这对优化和…...

卷积神经网络各层介绍

目录 1 卷积层 2 BN层 3 激活层 3.1 ReLU&#xff08;Rectified Linear Unit&#xff09; 3.2 sigmoid 3.3 tanh&#xff08;双曲正切&#xff09; 3.4 Softmax 4 池化层 5 全连接层 6 模型例子 1 卷积层 卷积是使用一个卷积核&#xff08;滤波器&#xff09;对矩阵进…...

Python应用指南:高德拥堵延时指数

随着城市化进程的加快&#xff0c;交通拥堵问题日益严重&#xff0c;成为影响城市居民生活质量的重要因素之一。为了科学评估和管理交通拥堵&#xff0c;各种交通拥堵指数应运而生。其中&#xff0c;高德地图提供的“拥堵延时指数”因其数据丰富、实时性强和应用广泛而备受关注…...

ISO 21434标准:汽车网络安全管理的利与弊

ISO 21434标准在提升汽车网络安全性方面起到了重要作用&#xff0c;但任何标准都不是完美无缺的&#xff0c;ISO 21434标准也存在一些不足之处。以下是对其不足之处的分析&#xff1a; 一、标准的灵活性与适应性 缺乏具体技术细节&#xff1a;ISO 21434标准更多地提供了网络安…...

无插件H5播放器EasyPlayer.js视频流媒体播放器如何开启electron硬解码Hevc(H265)

在数字化时代&#xff0c;流媒体播放器技术正经历着前所未有的变革。随着人工智能、大数据、云计算等技术的融合&#xff0c;流媒体播放器的核心技术不断演进&#xff0c;为用户提供了更加丰富和个性化的观看体验。 EasyPlayer.js H5播放器&#xff0c;是一款能够同时支持HTTP、…...

excel版数独游戏(已完成)

前段时间一个朋友帮那小孩解数独游戏&#xff0c;让我帮解&#xff0c;我看他用电子表格做&#xff0c;只能显示&#xff0c;不能显示重复&#xff0c;也没有协助解题功能&#xff0c;于是我说帮你做个电子表格版的“解题助手”吧&#xff0c;不能直接解题&#xff0c;但该有的…...

接口上传视频和oss直传视频到阿里云组件

接口视频上传 <template><div class"component-upload-video"><el-uploadclass"avatar-uploader":action"uploadImgUrl":on-progress"uploadVideoProcess":on-success"handleUploadSuccess":limit"lim…...

Arcgis 地图制作

地图如下,不同历史时期&#xff1a;...

【每日一题1121】python校招笔试题、面试题

1、Python字符串不是通过NUL或者’\0’来结束的 C语言中字符串使用’\0’作为结束符&#xff0c;以防止越界。但是在python中&#xff0c;字符串值只包含所定义的东西。 2、执行以下程序&#xff0c;输出结果为&#xff08;&#xff09; class Base(object):count 0def __in…...

Spring Boot + Vue 基于 RSA 的用户身份认证加密机制实现

Spring Boot Vue 基于 RSA 的用户身份认证加密机制实现 什么是RSA&#xff1f;安全需求介绍前后端交互流程前端使用 RSA 加密密码安装 jsencrypt库实现敏感信息加密 服务器端生成RSA的公私钥文件Windows环境 生成rsa的公私钥文件Linux环境 生成rsa的公私钥文件 后端代码实现返…...

Docker搭建有UI的私有镜像仓库

Docker搭建有UI的私有镜像仓库 一、使用这个docker-compose.yml文件&#xff1a; version: 3services:registry-ui:image: joxit/docker-registry-ui:2.5.7-debianrestart: alwaysports:- 81:80environment:- SINGLE_REGISTRYtrue- REGISTRY_TITLEAtt Docker Registry UI- DE…...

Qt打开文件对话框选择文件之后弹出两次

项目场景&#xff1a; 在 Qt 中&#xff0c;使用 ui 自动生成的 UI 文件会为每个控件自动生成一些默认的槽函数。如果您手动创建的槽函数名称与这些自动生成的槽函数名称相同&#xff0c;就会导致信号被多次连接&#xff0c;从而引发多次弹出文件对话框的问题。 原因分析&…...

【JAVA】正则表达式中的正向肯定预查

在Java中&#xff0c;正向肯定预查&#xff08;Positive Lookahead&#xff09;是一种正则表达式的高级特性&#xff0c;用于在匹配某个模式之前检查某个条件是否满足。正向肯定预查不会消耗字符&#xff0c;也就是说&#xff0c;它不会将匹配的字符从剩余的字符串中移除&#…...

django从入门到实战(一)——路由的编写规则与使用

Django 路由的编写规则与使用 在 Django 中&#xff0c;路由&#xff08;URLconf&#xff09;是将 URL 映射到视图函数的机制。它允许我们定义网站的 URL 结构&#xff0c;并将请求分发到相应的处理函数。以下是关于 Django 路由的定义规则及使用的详细介绍。 1. Django 的路…...

vue框架开发的前端项目,build和package的区别

在使用 Vue 框架开发前端项目时&#xff0c;build 和 package 是两个常见的操作&#xff0c;它们有不同的目的和作用。下面是它们的区别&#xff1a; 1. Build&#xff08;构建&#xff09; build 是将前端源代码&#xff08;如 Vue 组件、JavaScript 文件、CSS 样式等&#…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积

1.题目介绍 给定一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O…...

ArcPy扩展模块的使用(3)

管理工程项目 arcpy.mp模块允许用户管理布局、地图、报表、文件夹连接、视图等工程项目。例如&#xff0c;可以更新、修复或替换图层数据源&#xff0c;修改图层的符号系统&#xff0c;甚至自动在线执行共享要托管在组织中的工程项。 以下代码展示了如何更新图层的数据源&…...

ArcGIS Pro+ArcGIS给你的地图加上北回归线!

今天来看ArcGIS Pro和ArcGIS中如何给制作的中国地图或者其他大范围地图加上北回归线。 我们将在ArcGIS Pro和ArcGIS中一同介绍。 1 ArcGIS Pro中设置北回归线 1、在ArcGIS Pro中初步设置好经纬格网等&#xff0c;设置经线、纬线都以10间隔显示。 2、需要插入背会归线&#xf…...

表单设计器拖拽对象时添加属性

背景&#xff1a;因为项目需要。自写设计器。遇到的坑在此记录 使用的拖拽组件时vuedraggable。下面放上局部示例截图。 坑1。draggable标签在拖拽时可以获取到被拖拽的对象属性定义 要使用 :clone, 而不是clone。我想应该是因为draggable标签比较特。另外在使用**:clone时要将…...

开疆智能Ethernet/IP转Modbus网关连接鸣志步进电机驱动器配置案例

在工业自动化控制系统中&#xff0c;常常会遇到不同品牌和通信协议的设备需要协同工作的情况。本案例中&#xff0c;客户现场采用了 罗克韦尔PLC&#xff0c;但需要控制的变频器仅支持 ModbusRTU 协议。为了实现PLC 对变频器的有效控制与监控&#xff0c;引入了开疆智能Etherne…...

day51 python CBAM注意力

目录 一、CBAM 模块简介 二、CBAM 模块的实现 &#xff08;一&#xff09;通道注意力模块 &#xff08;二&#xff09;空间注意力模块 &#xff08;三&#xff09;CBAM 模块的组合 三、CBAM 模块的特性 四、CBAM 模块在 CNN 中的应用 一、CBAM 模块简介 在之前的探索中…...

【向量库】Weaviate 搜索与索引技术:从基础概念到性能优化

文章目录 零、概述一、搜索技术分类1. 向量搜索&#xff1a;捕捉语义的智能检索2. 关键字搜索&#xff1a;精确匹配的传统方案3. 混合搜索&#xff1a;语义与精确的双重保障 二、向量检索技术分类1. HNSW索引&#xff1a;大规模数据的高效引擎2. Flat索引&#xff1a;小规模数据…...

Qt 按钮类控件(Push Button 与 Radio Button)(1)

文章目录 Push Button前提概要API接口给按钮添加图标给按钮添加快捷键 Radio ButtonAPI接口性别选择 Push Button&#xff08;鼠标点击不放连续移动快捷键&#xff09; Radio Button Push Button 前提概要 1. 之前文章中所提到的各种跟QWidget有关的各种属性/函数/方法&#…...