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是一个接口,它定义了一系列操作顺序表的方法,例如添加元素、删除元素、获取元素、查询元素位置等。 ArrayList
是List
接口的一个具体实现类。它实现了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
的值(这里的1
、2
、3
、4
)会自动转换为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
目录 泛型 泛型的定义: 泛型的实例化: 泛型的使用: 顺序表ArrayList 顺序表ArrayList的两种实例化方法: ArrayList常用的方法: 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模板字符串的高级用法:解锁动态内容生成的无限可能 在JavaScript编程中,模板字符串(Template Literals)自ES6(ECMAScript 2015)引入以来,就以其简洁、直观的特性迅速成为开发者们生成动态…...
14. 【.NET 8 实战--孢子记账--从单体到微服务】--简易权限--章节总结
本章重点介绍了如何在一个简单的系统中实现基本的权限管理功能。通过构建一个简单的权限控制模型,章节阐述了如何为用户分配权限,并在应用程序中进行访问控制。 一、关键要点: 1. 用户管理(登录/注册/Token) 本章节聚…...
vulhub之fastjson
fastjson 1.2.24 反序列化 RCE 漏洞(CVE-2017-18349) 漏洞简介 什么是json json全称是JavaScript object notation。即JavaScript对象标记法,使用键值对进行信息的存储。举个简单的例子如下: {"name":"BossFrank", "age":23, "isDevel…...
2024年亚太地区数学建模大赛D题-探索量子加速人工智能的前沿领域
量子计算在解决复杂问题和处理大规模数据集方面具有巨大的潜力,远远超过了经典计算机的能力。当与人工智能(AI)集成时,量子计算可以带来革命性的突破。它的并行处理能力能够在更短的时间内解决更复杂的问题,这对优化和…...
卷积神经网络各层介绍
目录 1 卷积层 2 BN层 3 激活层 3.1 ReLU(Rectified Linear Unit) 3.2 sigmoid 3.3 tanh(双曲正切) 3.4 Softmax 4 池化层 5 全连接层 6 模型例子 1 卷积层 卷积是使用一个卷积核(滤波器)对矩阵进…...
Python应用指南:高德拥堵延时指数
随着城市化进程的加快,交通拥堵问题日益严重,成为影响城市居民生活质量的重要因素之一。为了科学评估和管理交通拥堵,各种交通拥堵指数应运而生。其中,高德地图提供的“拥堵延时指数”因其数据丰富、实时性强和应用广泛而备受关注…...
ISO 21434标准:汽车网络安全管理的利与弊
ISO 21434标准在提升汽车网络安全性方面起到了重要作用,但任何标准都不是完美无缺的,ISO 21434标准也存在一些不足之处。以下是对其不足之处的分析: 一、标准的灵活性与适应性 缺乏具体技术细节:ISO 21434标准更多地提供了网络安…...
无插件H5播放器EasyPlayer.js视频流媒体播放器如何开启electron硬解码Hevc(H265)
在数字化时代,流媒体播放器技术正经历着前所未有的变革。随着人工智能、大数据、云计算等技术的融合,流媒体播放器的核心技术不断演进,为用户提供了更加丰富和个性化的观看体验。 EasyPlayer.js H5播放器,是一款能够同时支持HTTP、…...
excel版数独游戏(已完成)
前段时间一个朋友帮那小孩解数独游戏,让我帮解,我看他用电子表格做,只能显示,不能显示重复,也没有协助解题功能,于是我说帮你做个电子表格版的“解题助手”吧,不能直接解题,但该有的…...
接口上传视频和oss直传视频到阿里云组件
接口视频上传 <template><div class"component-upload-video"><el-uploadclass"avatar-uploader":action"uploadImgUrl":on-progress"uploadVideoProcess":on-success"handleUploadSuccess":limit"lim…...
Arcgis 地图制作
地图如下,不同历史时期:...
【每日一题1121】python校招笔试题、面试题
1、Python字符串不是通过NUL或者’\0’来结束的 C语言中字符串使用’\0’作为结束符,以防止越界。但是在python中,字符串值只包含所定义的东西。 2、执行以下程序,输出结果为() class Base(object):count 0def __in…...
Spring Boot + Vue 基于 RSA 的用户身份认证加密机制实现
Spring Boot Vue 基于 RSA 的用户身份认证加密机制实现 什么是RSA?安全需求介绍前后端交互流程前端使用 RSA 加密密码安装 jsencrypt库实现敏感信息加密 服务器端生成RSA的公私钥文件Windows环境 生成rsa的公私钥文件Linux环境 生成rsa的公私钥文件 后端代码实现返…...
Docker搭建有UI的私有镜像仓库
Docker搭建有UI的私有镜像仓库 一、使用这个docker-compose.yml文件: 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打开文件对话框选择文件之后弹出两次
项目场景: 在 Qt 中,使用 ui 自动生成的 UI 文件会为每个控件自动生成一些默认的槽函数。如果您手动创建的槽函数名称与这些自动生成的槽函数名称相同,就会导致信号被多次连接,从而引发多次弹出文件对话框的问题。 原因分析&…...
【JAVA】正则表达式中的正向肯定预查
在Java中,正向肯定预查(Positive Lookahead)是一种正则表达式的高级特性,用于在匹配某个模式之前检查某个条件是否满足。正向肯定预查不会消耗字符,也就是说,它不会将匹配的字符从剩余的字符串中移除&#…...
django从入门到实战(一)——路由的编写规则与使用
Django 路由的编写规则与使用 在 Django 中,路由(URLconf)是将 URL 映射到视图函数的机制。它允许我们定义网站的 URL 结构,并将请求分发到相应的处理函数。以下是关于 Django 路由的定义规则及使用的详细介绍。 1. Django 的路…...
vue框架开发的前端项目,build和package的区别
在使用 Vue 框架开发前端项目时,build 和 package 是两个常见的操作,它们有不同的目的和作用。下面是它们的区别: 1. Build(构建) build 是将前端源代码(如 Vue 组件、JavaScript 文件、CSS 样式等&#…...
视频智能分析软件LiteAIServer摄像机实时接入分析平台噪声监测算法介绍
在视频监控领域,噪声问题一直是一个令人头疼的难题。无论是低光环境、摄像机传感器的高灵敏度,还是编码压缩过程中的失真,都可能导致视频中出现噪声,从而影响监控画面的清晰度和准确性。这些噪声不仅降低了视频的可读性࿰…...
鸿蒙UI开发与部分布局
UI开发 1. 布局概述 1.1 开发流程 1.先确定开发流程 -> 2.分析页面元素构成 ->3.选用合适的布局容器组件 1.3 布局元素组成:盒模型 2.1 布局分类 2.1 线性布局 线性布局是开发中最常用、最基础的布局,通过线性容器Row和Column构建 2.1.1 线性布…...
redis的map底层数据结构 分别什么时候使用哈希表(Hash Table)和压缩列表(ZipList)
在Redis中,Hash数据类型的底层数据结构可以是压缩列表(ZipList)或者哈希表(HashTable)。这两种结构的使用取决于特定的条件: 1. **使用ZipList的条件**: - 当Hash中的数据项(即f…...
css水平居中+垂直居中
display:“flex”,position: “absolute”,top:“50%”,left:“50%”,transform: ‘translate(-50%, -50%)’...
设计模式之 组合模式
组合模式(Composite Pattern)是一种结构型设计模式,它通过将对象组合成树形结构来表示“部分-整体”层次。组合模式允许客户端统一处理单个对象和对象集合。换句话说,组合模式让客户端可以像处理单个对象一样处理对象的集合&#…...
LCR 001 两数相除
一.题目: . - 力扣(LeetCode) 二.原始解法-超时: class Solution: def divide(self, a: int, b: int) -> int: # 1)分析: # 除法计算,不能使用除法符号,可以理解为实现除法 # 除法…...
数据库、数据仓库、数据湖、数据中台、湖仓一体的概念和区别
数据库、数据仓库、数据湖、数据中台和湖仓一体是数据管理和分析领域的不同概念,各自有不同的特点和应用场景。以下是它们的主要区别: 1. 数据库(Database) 定义:结构化的数据存储系统,用于高效地存储、检…...
vue 的生命周期函数
Vue 生命周期函数(生命周期钩子)是 Vue 实例从创建到销毁过程中,不同阶段所触发的特定函数。理解这些生命周期函数对于开发 Vue 应用至关重要,因为它们让你在不同的生命周期阶段执行代码,比如数据初始化、DOM 渲染完成…...
单片机UART协议相关知识
概念 UART(Universal Asynchronous Receiver/Transmitter,通用异步收发传输器) 是一种 异步 串行 全双工 通信协议,用于设备一对一进行数据传输,只需要两根线(TX,RX)。 异步&…...
【操作系统不挂科】<CPU调度(13)>选择题(带答案与解析)
前言 大家好吖,欢迎来到 YY 滴 操作系统不挂科 系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 本博客主要内容,收纳了一部门基本的操作系统题目,供yy应对期中考试复习。大家可以参考 本章为选择题题库,试…...
wordpress基于什么语言/百度推广官方
一、简介 Linux中应用层和驱动层编写代码时都会用到延时,本文主要介绍两种情况下延时功能的实现。 1.应用层:sleep、usleep; 2.驱动层:udelay、mdelay、ssleep、通过jiffies 、定时器、中断底半部; 二、应用…...
深圳市专注网站建设/搜索推广
智器Ten3从一上市就采用了最新的Android4.0系统,随着时间的推移官方已经更新至了最新的Android4.0.3版本。在上一页笔者已经简要的介绍了一下系统升级的步骤,可以看出智器平板的升级操作还是非常简单的。Ten3采用最新的Android4.0.3系统谷歌最新的Androi…...
www.北京网站建设/开发外包网站
结构图1 11.2 监听结构...
wordpress还能打开吗/网络产品及其推广方法
目录 说明 方法使用 标题使用 格式说明 文本居中 文本居中使用格式 下划线 使用方法 删除线 删除线使用格式 字体加粗 字体加粗使用格式方法 字体倾斜 字体倾斜使用格式方法 超链接 超链接使用格式 代码区域使用方法 列表使用 列表使用方法格式 水平分割线 …...
wordpress论坛怎么用/友情链接交易网站
目录 两个链表的第一个公共结点 链表中倒数最后k个结点 删除链表中重复的结点: JZ52 两个链表的第一个公共结点 思路:让两个链表相加,则到达公共结点的距离相同; /* struct ListNode {int val;struct ListNode *next;ListNode(…...
推软件/dz论坛如何seo
北京时间3月8日12:26分,被网友戏称为“网瘾少年”的OPPO副总裁沈义人继续在线爆料:NFC需要安排一下么,还是带Pay可以刷POS机的那种? 说到NFC,对于很多一、二线城市的智能手机用户而言早已经是生活中不可或缺的…...