小白备战蓝桥杯:Java集合与数据结构

目录

什么是集合?

集合的分类

<> : 泛型

浅谈泛型

 代码示例

细说泛型

泛型类

泛型方法

泛型接口

泛型通配符

Collection接口

集合的通用遍历方式

1、迭代器遍历

2、增强for循环

3、forEach方法

4、代码示例

List接口

方法

List集合的遍历方式

并发修改异常 : ConcurrentModificationException

数据结构——顺序表:ArrayList

构造方法

ArrayList 常用成员方法

代码示例

数据结构——双向链表:LinkedList

数据结构——红黑树:TreeSet

红黑规则

添加结点规则

数据结构——哈希表:HashSet


什么是集合?

集合是一种容器,长度可变

集合的分类

List集合:存取有序、有索引、可以存取重复的

Set集合:存取无序、无索引、不能存取重复的

<> : 泛型

浅谈泛型

泛型可以对集合中数据的数据类型进行约束

例如:ArrayList<String> list = new ArrayList<String>();

在JDK7版本之后,后面的尖括号中的内容可直接省略,直接写成ArrayList<String> list = new ArrayList<>();

目前: 使用泛型, 可以对集合中存储的数据, 进行类型限制

细节: 泛型中, 不允许编写基本数据类型

问题: 那我要是想集合中, 存储 整数, 小数, 字符... 这些数据, 怎么办呢?

解决: 使用基本数据类型, 所对应的包装类

                                            byte   ->   Byte

                                            short   ->   Short

                                            int     ->     Integer    (重点记忆)

                                            long     ->    Long

                                            float    ->     Float

                                            double   ->    Double

                                            boolean   ->   Boolean

                                            char     ->    Character  (重点记忆)

 代码示例

public static void main(String[] args) {// 步骤1: 创建一个集合容器, 内部存储 11.1 22.2 33.3ArrayList<Double> list1 = new ArrayList<>();list1.add(11.1);list1.add(22.2);list1.add(33.3);// 步骤2: 创建一个集合容器, 内部存储 张三, 李四, 王五ArrayList<String> list2 = new ArrayList<>();list2.add("张三");list2.add("李四");list2.add("王五");// 步骤3: 在控制台展示两个集合中的元素System.out.println(list1);System.out.println(list2);}

细说泛型

泛型类

泛型方法

泛型接口

泛型通配符

Collection接口

// 以多态的形式创建集合对象, 调用单列集合中的共有方法
//左边接口名,右边实现类对象Collection<String> c = new ArrayList<>();c.add("张三");c.add("李四");c.add("王五");boolean b = c.contains("赵四");System.out.println(b);System.out.println(c.size());

集合的通用遍历方式

List集合的遍历方式:

但这种方法不适用于Set集合,因为Set集合没有索引,所以下面介绍几种集合的通用遍历方法

1、迭代器遍历

public Iterator<E> iterator() : 获取遍历集合的迭代器

public E next() : 从集合中获取一个元素

public boolean hasNext() : 如果仍有元素可以迭代,则返回 true

迭代器遍历三部曲

2、增强for循环

简化迭代器的书写,底层逻辑也是迭代器

其实我觉得增强for循环有点像vue中的v-for,v-for="(item,index) in arr",其中的item就相当于上述例子中的s,而arr相当于上述例子中的list

3、forEach方法

4、代码示例

Collection<Student> c = new ArrayList<>();c.add(new Student("张三", 23));c.add(new Student("李四", 24));c.add(new Student("王五", 25));// 1. 获取迭代器Iterator<Student> it = c.iterator();// 2. 循环判断, 集合中是否还有元素while (it.hasNext()) {// 3. 调用next方法, 将元素取出Student stu = it.next();System.out.println(stu.getName() + "---" + stu.getAge());}System.out.println("--------------------");// 使用增强for循环遍历集合//idea增强for循环快捷键c.for+enterfor (Student stu : c) {System.out.println(stu);}System.out.println("--------------------");// foreach方法遍历集合c.forEach(stu -> System.out.println(stu));

List接口

List接口的特点 : 存取有序, 有索引, 可以存储重复的

方法

List<String> list = new ArrayList<>();list.add("张三");list.add("李四");list.add("王五");list.set(0, "赵六");list.remove(1);System.out.println(list.get(0));System.out.println(list);System.out.println("-------------------------");List<Integer> list2 = new ArrayList<>();list2.add(111);        // Integer e = 111;list2.add(222);list2.add(333);list2.remove(Integer.valueOf(222)); //若希望根据元素删除而不是根据索引删除,则需要Integer.valueOfSystem.out.println(list2);

List集合的遍历方式

通用遍历方式:

1. 迭代器遍历

2. 增强for循环

3. foreach方法       

List集合特有的遍历方式:

1. 普通for循环

2. ListIterator (List集合特有的迭代器)

List<String> list = new ArrayList<>();list.add("abc");list.add("bbb");list.add("ccc");list.add("abc");for (int i = 0; i < list.size(); i++) { //普通for循环String s = list.get(i);System.out.println(s);}System.out.println("---------------");ListIterator<String> it = list.listIterator();while(it.hasPrevious()){ //逆序遍历String s = it.previous();System.out.println(s);}System.out.println("---------------");while (it.hasNext()) { //顺序遍历String s = it.next();System.out.println(s);}

并发修改异常 : ConcurrentModificationException

场景: 使用[迭代器]遍历集合的过程中, 调用了[集合对象]的添加, 删除方法, 就会出现此异常

解决方案: 迭代器的遍历过程中, 不允许使用集合对象的添加或删除, 那就使用迭代器自己的添加或删除方法。普通的迭代器有删除方法,普通迭代器没有添加方法, 需要使用List集合特有的迭代器的添加方法

List<String> list = new ArrayList<>();list.add("眼瞅着你不是真正的高兴");list.add("温油");list.add("离开俺们这旮表面");list.add("伤心的人别扭秧歌");list.add("私奔到东北");ListIterator<String> it = list.listIterator();while (it.hasNext()) {String s = it.next();if ("温油".equals(s)) {it.add("哈哈");}}System.out.println(list);

数据结构——顺序表:ArrayList

当数组元素满了之后,会自动扩容为1.5倍

细节: 创建String, StringBuilder, ArrayList类的对象, 打印对象名, 都没有看到地址值, 而是元素内容

构造方法

                    public ArrayList() : 创建一个空的集合容器

ArrayList 常用成员方法

其中有一些方法是List接口提供的

代码示例

 public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("张三1");list.add("张三2");list.add("张三3");String s = list.get(2);System.out.println(s);System.out.println(list.size());}private static void updateMethod() {ArrayList<String> list = new ArrayList<>();list.add("张三1");list.add("张三2");list.add("张三3");String result = list.set(1, "李四");System.out.println(result);System.out.println(list);}private static void removeMethod() {ArrayList<String> list = new ArrayList<>();list.add("张三1");list.add("张三2");list.add("张三3");System.out.println(list);boolean flag = list.remove("李四");System.out.println(flag);System.out.println(list);}private static void addMethod() {ArrayList<String> list = new ArrayList<>();list.add("张三1");list.add("张三2");list.add("张三3");list.add(0, "张三4");System.out.println(list);}

数据结构——双向链表:LinkedList

public static void main(String[] args) {LinkedList<String> list = new LinkedList<>();list.add("张三");list.add("李四");list.add("王五");String s = list.get(1);System.out.println(s);}private static void method2() {LinkedList<String> list = new LinkedList<>();list.add("张三");list.add("李四");list.add("王五");list.add("赵六");System.out.println(list.getFirst());System.out.println(list.getLast());list.removeFirst();list.removeLast();System.out.println(list);}private static void method1() {LinkedList<String> list = new LinkedList<>();list.addFirst("张三");list.addFirst("李四");list.addFirst("王五");list.addLast("赵六");// 王五 李四 张三 赵六System.out.println(list);}

数据结构——红黑树:TreeSet

学习TreeSet之前,大家需要先理解一些概念:树、二叉树、二叉查找树(二叉搜索树)、平衡二叉树、左(右)旋,对于这些概念,大家可以去网上搜索数据结构的动画演示,结合动画很快就能理解

接下来咱们详细说说红黑树,作者在学平衡二叉树的时候觉得还蛮简单的,但是学到红黑树的时候,被红黑树添加结点的规则给绕晕了,所以在这里有必要记录一下红黑规则和红黑树添加结点的规则

红黑规则

红黑树是一种自平衡的二叉查找树

添加结点规则

TreeSet集合特点:排序、去重,代码示例:

 

数据结构——哈希表:HashSet

未完待续

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

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

相关文章

【哈希数组】697. 数组的度

697. 数组的度 解题思路 首先创建一个IndexMap 键表示元素 值表示一个列表List list存储该元素在数组的所有索引之后再次创建一个map1 针对上面的List 键表示列表的长度 值表示索引的差值遍历indexmap 将所有的list的长度 和 索引的差值存储遍历map1 找到最大的key 那么这个Ke…

基于Python的B站排行榜大数据分析与可视化系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 本文介绍了一项基于Python的B站排行榜大数据分析与可视化系统的研究。通过网络爬虫技术&#xff0c;系统能够自动分析B站网址&#xff0c;提取大量相关文本信息并存储在系统中。通过对这些信息进行…

LoongArch指令集-特权指令系统——摘抄自胡伟武体系结构和龙芯架构32位精简版参考手册

例外与中断 1 中断 1.1 中断类型 龙芯架构 32 位精简版下的中断采用线中断的形式。每个处理器核内部可记录 12 个线中断&#xff0c;分别是&#xff1a;1 个核间中断&#xff08;IPI&#xff09;&#xff0c;1 个定时器中断&#xff08;TI&#xff09;&#xff0c;8 个硬中断…

CSAPP: LinkBomb 重定位和链接题解(一)

前言 我看了一下&#xff0c;网上关于 LinkBomb 的题解不是很多&#xff0c;LinkBomb 不是 CSAPP 目前大纲的内容&#xff0c;大多数都是写的 LinkLab。如果你做的作业内容是要求每关输出学号&#xff0c;那么你就是跟我一样的 LinkBomb 的实验&#xff08;需要注意的是&#…

emacs:Searching for program: No such file or directory,sml;

首先&#xff0c;编辑一个现有的或新的 SML 文件&#xff08;如果没有其他方便的方法&#xff0c;可尝试C-x C-f test.smlC-x C-f test.sml 创建一个新文件&#xff09;。你会看到 Emacs 窗口底部的模式显示从 "基本"&#xff08;或其他任何模式&#xff09;变成了 S…

OSG 关于MVPW变换

目录 1、模型 Model 2、观察矩阵 ViewMatrix 4、窗口矩阵变化 5、总结 在osg中观察矩阵接口设置如下: 其中eye是相机的世界坐标位置,center是相机观察的位置,up是相机向上向量。 在计算机的三维世界中&#xff0c;相机如同我们的眼睛&#xff0c;捕捉眼前的每一副画面&#xff…

20231231_小米音箱接入chatgpt

参考资料&#xff1a; GitHub - yihong0618/xiaogpt: Play ChatGPT and other LLM with Xiaomi AI Speaker 小爱音箱ChatGPT的折腾记录&#xff1a;win平台部署并运行成功_哔哩哔哩_bilibili GitHub - chatanywhere/GPT_API_free: Free ChatGPT API Key&#xff0c;免费Chat…

UG装配-接触对齐

UG装配约束命令在如下位置 首选接触&#xff1a;含接触和对齐&#xff0c;自动判断两种类型 接触&#xff1a;约束对象使其曲面法向在相反方向&#xff0c;并共面或共线 对齐&#xff1a;约束对象使其曲面法向在同一方向&#xff0c;并共面或共线 自动判断中心/轴&#xff1…

Mysql实时数据同步工具Alibaba Canal 使用

目录 Mysql实时数据同步工具Alibaba Canal 使用Canal是什么&#xff1f;工作原理重要版本更新说明 环境准备安装Canalwindow Java : Canal Client 集成依赖编码 工作流程开启原生MQRocketMQ 安装部署 canal配置说明1.1 canal.properties常用配置介绍&#xff1a;2.common参数定…

分库分表之Mycat应用学习一

1 为什么要分库分表 1.1 数据库性能瓶颈的出现 对于应用来说&#xff0c;如果数据库性能出现问题&#xff0c;要么是无法获取连接&#xff0c;是因为在高并发的情况下连接数不够了。要么是操作数据变慢&#xff0c;数据库处理数据的效率除了问题。要么是存储出现问题&#xf…

C#中使用is关键字检查对象是否与给定类型兼容

目录 一、定义 二、示例 三、生成 在程序的开发过程中经常会使用类型转换&#xff0c;如果类型转换不成功则会出现异常&#xff0c;从抛出异常到捕获并处理异常&#xff0c;无形中增加了系统的开销&#xff0c;而且太过频繁地处理异常还会严重地影响系统的稳定性。is关键字可…

双指针刷题(三)

所有算法文章链接&#xff08;最底部&#xff09; http://t.csdnimg.cn/IbllR 1.有效三角形个数 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 1.分析题意 给一个非负的数组&#xff0c;判断这个数组能组成多少个三角形。 2.解题思路 补充知识…

前端vue uni-app使用Vue和ECharts构建交互式树形结构图

题目&#xff1a;使用Vue和ECharts构建交互式树形结构图 摘要&#xff1a;本文介绍了如何使用Vue.js和ECharts构建一个交互式的树形结构图。通过整合ECharts的强大可视化功能&#xff0c;我们创建了一个可拖拽移动、点击展开和收缩的树形结构图&#xff0c;并实现了无限添加子…

【ARMv8M Cortex-M33 系列 2.1 -- Cortex-M33 使用 .hex /.srec 文件介绍】

请阅读【嵌入式开发学习必备专栏 之Cortex-M33 专栏】 文章目录 HEX 文件介绍英特尔十六进制文件格式记录类型hex 示例Cortex-M 系列hex 文件的使用 hex 文件和srec 文件生成Motorola S-Record (srec) 格式 HEX 文件介绍 .hex 文件通常用于微控制器编程&#xff0c;包括 ARM C…

蜕变,我的2023

作者&#xff1a;苍何&#xff0c;前大厂高级 Java 工程师&#xff0c;阿里云专家博主&#xff0c;CSDN 2023 年 实力新星&#xff0c;土木转码&#xff0c;现任部门技术 leader&#xff0c;专注于互联网技术分享&#xff0c;职场经验分享。 &#x1f525;热门文章推荐&#xf…

react-router-dom5升级到6

前言 升级前版本为5.1.2 下载与运行 下载 npm install react-router-dom6运行 运行发现报错: 将node_modules删除&#xff0c;重新执行npm i即可 运行发现如下报错 这是因为之前有引用react-router-dom.min&#xff0c;v6中取消了该文件&#xff0c;所以未找到文件导致报错。…

抖音详情API:开发环境搭建与工具选择

随着短视频的流行&#xff0c;抖音已经成为了一个备受欢迎的社交媒体平台。对于开发人员而言&#xff0c;利用抖音详情API开发定制化的抖音应用具有巨大的潜力。本文将为你详细介绍开发抖音应用的开发环境搭建与工具选择&#xff0c;帮助你顺利地开始开发工作。 一、开发环境搭…

【网络安全 | Misc】miss_01 太湖杯

解压时提示输入密码&#xff1a; 如果 frFlags 或 deFlags 不为0会导致zip的伪加密 将deFlags的值修改为0 将9改为0&#xff0c;另存为123.zip&#xff1a; 即可绕过加密&#xff1a; 得到一个zip一个docx&#xff0c;但zip需要密码&#xff1a; 因此看docx有无敏感信息&#x…

机器学习、人工智能、深度学习的关系

人工智能(Artificial Intelligence&#xff0c;AI) 人工智能范围很广&#xff0c;它是一门新的科学与工程&#xff0c;是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的技术科学&#xff0c;研究内容涵盖语音识别、图像识别、自然语言处理、智能搜索和…

计算机毕业设计------ssm茶叶溯源系统

项目介绍 茶叶溯源系统&#xff0c;分为前台与后台。普通用户可在前台通过18位的编码查询茶叶的出售历史。 后台分为两种角色&#xff0c;管理员与经销商&#xff1b; 管理员主要功能包括&#xff1a; 主界面&#xff1b; 管理员管理&#xff1a;管理员列表、添加管理员&am…