14.集合、泛型、List系列

news2024/9/25 1:17:07

目录

一.集合类的体系结构

1.1 Collection体系

1.2 Map集合体系

1.3 集合的注意事项

二.泛型

2.1 什么是泛型

2.2 泛型的优点

2.3 泛型可以在哪些地方上定义

2.4 泛型类

2.5 泛型方法

2.6 泛型接口

2.7 泛型通配符

三.Collection集合

3.1 什么是Collection集合

3.2 Collection的常用API

3.3 Collecion集合的遍历方式

3.3.1 迭代器

3.3.2 增强for循环

3.3.3 Lambda表达式

四.常见数据结构

4.1 什么是数据结构

4.2 数据结构三要素

4.3 常见的数据结构及其特点和作用

4.4 红黑树

4.4.1 什么是红黑树

4.4.2 红黑规则

4.4.3 红黑树的优点

五.List系列集合

5.1 List系列集合特点

5.2 List集合特有方法

5.3 List集合的遍历方式

5.4 ArrayList集合

5.4.1 ArrayList集合底层原理

5.4.2 ArrayList的特有API

5.5 LinkedList集合

5.5.1 LinkedList的底层原理

5.5.2 LinkedList的特有API

5.6 集合的并发修改异常问题

5.6.1 问题引出

5.6.2 哪些遍历方式会出问题

5.6.3 哪些不会出问题


一.集合类的体系结构

 集合类体系结构分为二类,一类是Collection单列集合体系,一类是Map双列集合体系。

1.1 Collection体系

集合中的每个元素只包含一个值。

1.2 Map集合体系

集合中的每个元素包含二个值。

1.3 集合的注意事项

1. 集合中只能存储引用数据类型,不支持基本数据类型。

2. 集合中存儲的是元素对象的地址。

二.泛型

2.1 什么是泛型

泛型可以在编译阶段约束操作的数据类型。泛型类是在实例化的时候指明泛型的具体类型。

2.2 泛型的优点

1. 统一数据类型。

2. 把运行时期的问题提前到了编译期间,避免了强制类型转换可能出现的问题,因为编译阶段类型就能确定下来。

2.3 泛型可以在哪些地方上定义

2.4 泛型类

1.什么是泛型类

定义类时同时定义了泛型的类就是泛型类。

2.泛型类的作用

编译阶段约定操作的数据的类型。

3.泛型类的格式

4.泛型类的原理

把出现泛型变量的地方全部替换成传输的真实数据类型。

2.5 泛型方法

1.什么是泛型方法

定义方法时同时定义了泛型的方法就是泛型方法,是在调用方法的时候指明泛型的具体类型。

2.泛型方法的作用

方法中可以使用泛型接收一切类型的参数,方法更具备通用性。

3.泛型方法的格式

4.泛型方法的原理

把出现泛型变量的地方全部替换成传输的真实数据类型。

2.6 泛型接口

1.什么是泛型接口

使用了泛型定义的接口就是泛型接口。

2.泛型接口的作用

泛型接口可以让实现类选择当前功能需要操作的数据类型。

3.泛型接口的格式

4.泛型接口的原理

泛型接口可以约束实现类,实现类可以在实现接口的时候传入自己想要操作的数据类型,这样重写的方法都是针对于该类型的操作

2.7 泛型通配符

1.通配符 ?

?可以在"使用泛型"的时候代表一切类型。

2.泛型的上限和下限

上限   ?extend Car:?必须是Car或者其子类。

下限   ?super Car:?必须是Car或者其父类

三.Collection集合

3.1 什么是Collection集合

Collection集合是单列集合的祖宗接口,它的功能是全部单列集合都能继承使用的。

3.2 Collection的常用API

3.3 Collecion集合的遍历方式

3.3.1 迭代器

迭代器在Java中的代表是Iterator,迭代器是集合的专用遍历方式。

1. 首先调用集合对象的iterator方法获得集合的迭代器对象。

 例如: Iterator<String> iterator = collection.iterator();

2. 通过iterator中的方法遍历集合

例如:  

while (iterator.hasNext()){

            String ele = iterator.next();

            System.out.println(ele);

            }

3.3.2 增强for循环

增强for循环既可以遍历集合,也可以遍历数组。

3.3.3 Lambda表达式

通过调用集合对象的foreach方法,并以Consumer的匿名内部类对象为参数即可遍历集合。

例如:

四.常见数据结构

4.1 什么是数据结构

数据结构是计算机底层存储、组织数据的方式。是指数据是以什么方式排列在一起的。

4.2 数据结构三要素

4.3 常见的数据结构及其特点和作用

栈、队列、数组、链表、二叉树、二叉查找树、平衡二叉树、红黑树。

  • 队列:先进先出,后进后出。
  • 栈:后进先出,先进后出。
  • 数组:内存连续区域,查询快,增删慢。
  • 链表:元素是游离的,查询慢,首尾操作极快。
  • 二叉树:永远只有一个根节点, 每个结点不超过2个子节点的树。
  • 查找二叉树:小的左边,大的右边,但是可能树很高,查询性能变差。
  • 平衡查找二叉树:让树的高度差不大于1,增删改查都提高了。
  • 红黑树(就是基于红黑规则实现了自平衡的排序二叉树)

4.4 红黑树

4.4.1 什么是红黑树

红黑树的每一个节点不是红就是黑,是通过红黑规则实现自平衡的二叉查找树。

例如:

4.4.2 红黑规则

1. 每一个节点要么是红色,要么是黑色,根节点必须是黑色的。

2. 如果一个节点没有子节点或者父节点,则该节点相应的指针属性值为Nil,这些Nil视为叶节点,每个叶节点(Nil)是黑色的;

3. 如果某一个节点是红色,那么他的子节点必须是黑色。

4. 对每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点。

4.4.3 红黑树的优点

红黑树的增删改查性能都很好

五.List系列集合

5.1 List系列集合特点

有序、可重复、有索引。ArrayList和LinkedList这二个实现类也是这个特点。

有序:存储和取出的元素顺序一致。

可重复:存储的元素可以重复。

有索引:可以通过索引操作元素。

5.2 List集合特有方法

List集合因为支持索引,所以多了很多索引操作的API。当然,Collection的功能List也都继承了。

5.3 List集合的遍历方式

前三种继承自Collection,后一种是因为List系列有索引。

1.迭代器

2.增强for循环

3.Lamdba表达式

4.for循环

5.4 ArrayList集合

5.4.1 ArrayList集合底层原理

ArrayList底层是基于数组实现的,根据索引查询元素快,增删要做元素的移位操作所以增删慢。

5.4.2 ArrayList的特有API

ArrayList相对于List没有特有API

5.5 LinkedList集合

5.5.1 LinkedList的底层原理

linkedList的底层原理是双链表,查询慢,首尾操作的速度是极快的。

5.5.2 LinkedList的特有API

因为LinkedList的底层原理是双链表,所以多了很多首尾操作的特有API。

5.6 集合的并发修改异常问题

5.6.1 问题引出

当我们从集合中找出某个元素并删除的时候可能出现一种并发修改异常问题。

5.6.2 哪些遍历方式会出问题

1. 迭代器遍历集合且直接用集合删除元素的时候可能出现。

2. 增强for循环遍历集合且直接用集合删除元素的时候可能会出现。

3. Lambad表达式方式可能会出现。

5.6.3 哪些不会出问题

1. 迭代器遍历集合但是用自己的删除方法不会出问题。

2. 使用for循环并加以改进(如倒着删,加个i--)不会出现问题。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CentOS7没有图形化界面,怎么安装图形化界面

我们在安装CentOS7时&#xff0c;如果选择 “最小化” 安装那么系统就只有命令行界面&#xff0c;但是没有图形化界面&#xff0c;如下图&#xff1a; 解决的完整步骤如下&#xff1a; 1&#xff09;开启CentOS7并登录root用户&#xff08;一定要以root用户登录&#xff0c;其…

windows电脑生成ios证书的方法

在uniapp开发进行云打包的时候&#xff0c;打包Ios应用需要p12格式的私钥证书和证书profile文件。无论使用windows电脑&#xff0c;还是mac电脑&#xff0c;生成ios证书&#xff0c;需要苹果开发者账号&#xff0c;假如你还没有苹果开发者账号&#xff0c;你可以参考下文先到苹…

「跨界选手」郭莎莎:我是怎么从服装设计转向智能家居的

作者 | 牧之 编辑 | 小沐 出品 | 智哪儿 zhinaer.cn最近几年&#xff0c;全国各地都在上演智能家居创业热。尤其是很多年轻人&#xff0c;从不同的行业转战而来。他们拥有不同的背景、认知和经验&#xff0c;为智能家居的线下渠道注入了多元活力。而本期「智哪儿」专访的采访对…

vue前端框架课程笔记(四)

目录vue中的内置指令v-textv-htmlv-cloakv-oncev-pre汇总自定义指令全局指令与局部指令使用示例生命周期问题引入生命周期函数简介钩子函数图示过程生命周期函数示例本博客参考尚硅谷官方课程&#xff0c;详细请参考 【尚硅谷bilibili官方】 本博客以vue2作为学习目标&#x…

新公链的加速孵化器有哪些值得期待?

媒体、工程师技术支持、VC、机构投资者&#xff0c;有经验的创业者等。Moonbeam Accelerator团结各方力量&#xff0c;帮助创业者做更好的领导者。 Web3的发展瞬息万变&#xff0c;包括Moonbeam自己也在未知的领域探索。作为区块链创业者&#xff0c;我们都有自己固定的思维和…

【redis6】第十一章(秒杀案例)

计数器和人员记录 秒杀页面 <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loo…

RocketMQ5.0.0消息发送

一、消息消息实体类为org.apache.rocketmq.common.message.Message&#xff0c;其主要属性如下。// 消息所属topic private String topic; // 消息Flag&#xff08;RocketMQ不作处理&#xff09;&#xff0c;即&#xff1a;用户处理 private int flag; // 扩展属性 private Map…

零代码实现EDI标准报文转换

在与客户进行沟通的时候&#xff0c;经常有客户对EDI实施很感兴趣&#xff0c;一方面是客户具有相应的IT基础和技术力量&#xff0c;并且后续可能会有更多合作伙伴的EDI接入&#xff0c;因此客户有自主实施的想法&#xff1b;另一方面也可以在一定程度上为企业节约成本。 知行…

谷歌seo排名需要的链接数量?谷歌seo排名需要多久?

本文主要分享要实现谷歌排名需要多少条英文外链&#xff0c;以及时间成本的预估。 本文由光算创作&#xff0c;有可能会被修改或剽窃&#xff0c;我们佛系对待这种行为吧。 谷歌seo排名需要的链接数量是多少&#xff1f; 答案是&#xff1a;需要1000~2000条GPB外链 为什么一…

对数据中台的梳理与思考

Gartmer:《数据中台在中国已经接近炒作的顶峰》 PowerData&#xff1a;接近顶峰?那就说明还有上升的空间嘛 本篇文章聊聊数据中台爆火背后的逻辑。 一、概念篇 1、什么是中台 中台是将系统的通用化能力进行打包整合&#xff0c;通过接口的形式赋能到外部系统&#xff0c;从而…

嵌入式Linux-线程的回收/取消/分离

1. 线程的回收 1.1 回收线程的概念 春节七天连假已经过完啦&#xff0c;也该回收一下我们放假的线程了&#xff01; 听过很多回收旧手机、旧冰箱和旧彩电…&#xff0c;那么回收线程又是什么呢&#xff1f; 在父、子进程当中&#xff0c;父进程可通过 wait()函数&#xff08;…

尚硅谷谷粒商城Rabbit MQ

文章目录1. 概述2. 相关概念2.1 RabbitMQ简介&#xff1a;2.2核心概念2.2.1 Message2.2.2 Publisher2.2.3 Exchange2.2.4 Queue2.2.5 Binding2.2.6Connection2.2.7 Channel2.2.8 Consumer2.2.9Virtual Host2.2.10Broker3.Docker安装rabbit MQ4、RabbitMQ运行机制4.1AMQP 中的消…

【信管10.2】规划识别风险及定性分析

规划识别风险及定性分析了解完风险相关的知识以及项目风险的管理过程之后&#xff0c;我们就进入到每个风险过程的学习。风险管理过程的内容并不算少&#xff0c;直逼范围、进度、成本、质量四大核心模块&#xff0c;也是我们需要重点关注的内容。当年的论文我写得就是风险管理…

IDEA中Maven打包遇到的问题

问题1 问题描述 使用Maven进行打包&#xff0c;点击package&#xff0c;Run控制台的信息出现中文乱码的情况 解决方法 -DarchetypeCataloginternal -Dfile.encodingGBK问题2 问题描述 程序能够正常运行&#xff0c;但是使用Maven对程序进行打包&#xff0c;在编译过程中出现…

注册Github账号详细教程【超详细篇 适合新手入门】

前言 &#x1f4dc; “ 作者 久绊A ” 专注记录自己所整理的Java、web、sql等&#xff0c;IT技术干货、学习经验、面试资料、刷题记录&#xff0c;以及遇到的问题和解决方案&#xff0c;记录自己成长的点滴 目录 一、GitHub的简介 1、大概介绍 2、详细介绍 二、如何注册自己…

算法训练营 day29 回溯算法 组合总和III 电话号码的字母组合

算法训练营 day29 回溯算法 组合总和III 电话号码的字母组合 组合总和III 216. 组合总和 III - 力扣&#xff08;LeetCode&#xff09; 找出所有相加之和为 n 的 k 个数的组合&#xff0c;且满足下列条件&#xff1a; 只使用数字1到9 每个数字 最多使用一次 返回 所有可能的…

16.Map系列、集合嵌套、不可变集合

目录 一.Map 1.1 Map集合概述 1.2 Map集合体系 1.3 Map集合体系特点 1.4 Map集合实现类特点 1.5 Map集合的API 1.6 Map集合的遍历方式 1.6.1 键找值的方式遍历 1.6.2 键值对的方式遍历 1.6.3 Lambda表达式的方式 1.7 HashMap 1.7.1 HashMap的特点 1.7.2 底层原理 …

python求不同分辨率图像的峰值信噪比,一文搞懂

可以使用 Python 的 NumPy 和 OpenCV 库来实现这个任务。提前准备一张图片作为素材。 文章目录什么是峰值信噪比PSNR 峰值信噪比补充说明使用 OpenCV 库来实现这个任务PSNR 的计算值受图像的亮度影响计算不同分辨率图像的 PSNRpython 求不同分辨率图像的峰值信噪比 | 其他知识点…

Java面试题:finalize的原理和工作缺点是什么

finalize是 Object 中的一个方法&#xff0c;如果子类重写它&#xff0c;垃圾回收时此方法会被调用&#xff0c;可以在其中进行资源释放和清理工作。其次将资源释放和清理放在 finalize 方法中非常不好&#xff0c;非常影响性能&#xff0c;严重时甚至会引起 OOM&#xff0c;从…

LabVIEW对NI Linux RT应用程序性能进行基准测试

LabVIEW对NI Linux RT应用程序性能进行基准测试如果应用程序具有苛刻的性能要求&#xff0c;则应为应用程序创建性能基准测试&#xff0c;以确保它满足性能要求。性能要求高度依赖于应用程序&#xff0c;应确定哪些性能指标很重要。下面介绍了典型的实时应用程序性能指标。如果…