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

集合的进阶学习

集合体系结构

Collection 单列集合

包含List Set

List 包含ArrayList LinkedList

Set包含HashSet TreeSet

HashSet包含LinkedHashSet

List系列集合:添加的元素是有序的、可重复、有索引

Set系列集合:添加的元素是无序的、不重复、无索引

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

    public static void main(String[] args) {//Collection是一个接口,我们不能直接创建它的对象Collection<String> coll=new ArrayList<>();//1.添加元素/*细节1.如果王List里添加元素,方法总是返回true 因为List允许元素重复细节2.如果往Set李添加元素,不存在返回true,存在返回falseSet系列集合不允许重复* */coll.add("aaa");coll.add("bbb");coll.add("ccc");coll.add("ddd");System.out.println(coll);//2.清空
//        coll.clear();
//        System.out.println(coll);//3.删除//因为Collection里面定义的方法是共性的方法,所以不能通过索引进行删除,智能通过元素的对象进行删除/*方法会有一个布尔类型的返回值,true删除成功,false失败* */coll.remove("aaa");System.out.println(coll);//4.判断元素是否包含//底层是依赖equals方法进行判断是否存在的//所以要判断自定义对象是否存在时候,要重新equals方法System.out.println(coll.contains("bbb"));//5.判空boolean empty = coll.isEmpty();System.out.println(empty);//6.获取集合的长度int size = coll.size();System.out.println(size);}

Collection的遍历方式

迭代器遍历

特点:迭代器不依赖索引

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

Collection<Integer> collection= new ArrayList<>();
collection.add(1);
collection.add(2);
collection.add(3);
Iterator<Integer> it=collection.iterator();
while (it.hasNext()){int i=it.next();System.out.print(i+"  ");
}

细节注意:

1.报错NoSuchElementException

2.迭代器遍历完毕,指针不会复位

3.循环中只能用一次next方法

4,迭代器遍历时,不能用集合的方法进行添加或者删除

增强for遍历

增强for的底层就是迭代器,为了简化迭代器的代码书写的

所有的单列集合和数组才能用增强for遍历

格式:

for(元素的数据类型 变量名:数组或者集合){

}

for(String s : list){

}

public static void main(String[] args) {Collection<String> coll = new ArrayList<>();coll.add("zhangsan");coll.add("lisi");coll.add("wangwu");for (String s : coll) {System.out.println(s);}
}

细节:

修改增强for中的变量,不会改变集合中原来的数据

Lambda表达式遍历

    public static void main(String[] args) {Collection<String> coll = new ArrayList<>();coll.add("zhangsan");coll.add("lisi");coll.add("wangwu");/*      coll.forEach(new Consumer<String>() {@Override//s 是以此表示集合的每一个数据public void accept(String s) {System.out.println(s);}});*/coll.forEach(s -> System.out.println(s));}
}

List中常见的方法和遍历方式

//List集合中的两个删除的方法
//1.直接删除元素
//2.通过素银进行删除//1.创建集合并添加元素
//1.创建一个集合
List<String> list =new ArrayList<>();//2.添加元素
list.add("a");
list.add("b");
list.add("c");//void add(int index,E element);在指定索引位置添加指定的元素
//细节:
/*
原来索引上的元素会依次往后移
* */
list.add(1,"QQQ");//remove
String remove = list.remove(0);
System.out.println(remove);//set
String  aaa = list.set(0, "aaa");
System.out.println(aaa);//get
String s = list.get(0);
System.out.println(s);//3.打印集合
System.out.println(list);

List集合的五种遍历方式

        //创建集合List<String> list = new ArrayList<>();list.add("aaa");list.add("bbb");list.add("ccc");list.add("ddd");list.add("eee");/* //1.迭代器遍历Iterator<String> iterator = list.iterator();while (iterator.hasNext()){String next = iterator.next();System.out.println(next);}*///2.增强for/*    for (String str : list) {System.out.println(str);}*///3.Lambda表达式
/*        list.forEach(s-> System.out.println(s));*///4.普通for/*      for (int i = 0; i < list.size(); i++) {String s = list.get(i);System.out.println(s);}*///5.列表迭代器//获取一个列表迭代器对象,同样的里面的指针也是指向零索引ListIterator<String> it = list.listIterator();while (it.hasNext()){String next = it.next();if ("bbb".equals(next)){it.add("qqq");}System.out.println(next);}System.out.println(list);

遍历方式比较

迭代器遍历:在遍历的过程中需要删元素,请使用迭代器

列表迭代器:在遍历的时候需要添加元素,请使用列表迭代器

增强for,Lambda:仅仅想遍历

普通for:如果遍历的时候想操作索引

Set系列集合

无序:存取顺序不一致

不重复:可以去除重复

无索引:没有带索引的方法,所以不能使用普通for遍历,也不能通过索引获取元素

Set集合的实现类

HashSet:无序,不重复,无索引

LinkedHashSet:有序,不重复,无索引

TreeSet:可排序,不重复,无索引

        //1.创建Set集合对象Set<String> s = new HashSet<>();//2.添加元素s.add("aaa");s.add("bbb");s.add("ccc");s.add("ddd");
//        s.add("aaa");3.遍历//迭代器遍历Iterator<String> iterator = s.iterator();while (iterator.hasNext()) {String next = iterator.next();System.out.println(next);}//增强forfor (String s1 : s) {System.out.println(s1);}//Lambda表达式s.forEach(a -> System.out.println(a));

HshSet底层采取哈希表存储数据

TreeSet集合默认的规则:对于字符、字符串类型,按照ASCII码表中的顺序进行排序

TreeSet的两种排序方式

1.自然排序

类里面实现Comparable接口里面的方法

@Override
public int compareTo(Student o) {//指定排序的规则//按照年龄的升序进行排序return    this.getAge()-o.getAge();}

2.比较器排序

TreeSet<String> ts = new TreeSet<>((o1, o2) -> {int i = o1.length() - o2.length();i = i == 0 ? o1.compareTo(o2) : i;return i;
});
TreeSet<String> ts = new TreeSet<>(new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {int i = o1.length() - o2.length();i = i == 0 ? o1.compareTo(o2) : i;return i;}
});

使用场景

1.如果想要集合中的元素可重复

用ArrayList基于数组的

2.如果想要集合中的元素可重复,而且当前的增删操作明显多于查询

用LinkedList,基于链表的

3.如果想对集合中的元素去重

用HashSet,基于哈希表的

4.如果想对集合中的元素去重,而且保重存取顺序

用LinkedHashList,基于哈希表和双链表,效率低于HashSet

5.如果想对集合中的元素进行排序

用TreeSet,基于红黑树,后续可以用List集合实现排序

相关文章:

集合的进阶学习

集合体系结构 Collection 单列集合 包含List Set List 包含ArrayList LinkedList Set包含HashSet TreeSet HashSet包含LinkedHashSet List系列集合&#xff1a;添加的元素是有序的、可重复、有索引 Set系列集合&#xff1a;添加的元素是无序的、不重复、无索引 Collectio…...

Java真过饱和了吗?现在学Java迟了?

Java行业内幕揭秘 我是某有名机构的线下课Java老师&#xff0c;负责Java热门框架教学&#xff0c;如Spring、Spring MVC、Spring Boot。但最近被解雇了&#xff0c;让我来吐槽一下。Java现在的学习人数真的太多太多了。 Java的学习饱和度 Java学习的人太多&#xff0c;给你一…...

glibc2.35-通过tls_dtor_list劫持exit执行流程

前言 glibc2.35删除了malloc_hook、free_hook以及realloc_hook&#xff0c;通过劫持这三个hook函数执行system已经不可行了。 传统堆漏洞利用是利用任意地址写改上上述几个hook从而执行system&#xff0c;在移除之后则需要找到同样只需要修改某个地址值并且能够造成程序流劫持…...

linux-OpenSSL升级

1.安装编译所需的安装包 yum install -y gcc make perl zlib-devel 2.从 OpenSSL 官网下载&#xff08;https://www.openssl.org/source/openssl-1.1.1v.tar.gz&#xff09; 注:如果原先版本为1.x.x,升级时还是需要选择1.x.x 3. 编译安装 # 解压tar -xvf openssl-1.1.1v.tar…...

Nginx全家桶配置详解

源码包安装NGINX A&#xff0c;搭建Web Server&#xff0c;任意HTML页面&#xff0c;其8080端口提供Web访问服务&#xff0c;截图成功访问http(s)&#xff1a;//[Server1]:8080并且回显Web页面。保留Server1&#xff0c;但是不允许直接访问Server 1&#xff0c;再部署1套NGINX …...

CMake生成Visual Studio工程

CMake – 生成Visual Studio工程 C/C项目经常使用CMake构建工具。CMake 项目文件&#xff08;例如 CMakeLists.txt&#xff09;可以直接由 Visual Studio 使用。本文要说明的是如何将CMake项目转换到Visual Studio解决方案(.sln)或项目(.vcxproj) 开发环境 为了生成Visual S…...

数学建模--K-means聚类的Python实现

目录 1.算法流程简介 2.1.K-mean算法核心代码 2.2.K-mean算法效果展示 3.1.肘部法算法核心代码 3.2.肘部法算法效果展示 1.算法流程简介 #k-means聚类方法 """ k-means聚类算法流程: 1.K-mean均值聚类的方法就是先随机选择k个对象作为初始聚类中心. 2.这…...

防坠安全带上亚马逊美国站要求的合规标准是什么?

防坠安全带 防坠安全带是一种防护装备&#xff0c;适合工人在高空作业时或在可能发生跌落的无防护边缘行走时穿着。防坠安全带设计用于包裹身体躯干&#xff0c;并将坠落力至少分布到大腿上部、骨盆、胸部和肩部。防坠安全带是固定物体与非固定物体之间的连接物&#xff0c;通…...

PDF转Word的方法分享与注意事项。

PDF和Word是两种常用的文档格式&#xff0c;它们各有优点&#xff0c;适用于不同的场景。然而&#xff0c;有时候我们需要将PDF转换为Word&#xff0c;以便更好地进行编辑和排版。本文将介绍几种常用的PDF转Word的方法&#xff0c;并分享一些注意事项。 一、PDF转Word的方法 使…...

gitlab配置webhook,commit message的时候校验提交的信息

在 GitLab 中配置 Webhook 来调用 Java 接口以校验 commit 信息&#xff0c;是很多公司的一些要求&#xff0c;因为提交信息的规范化是必要的 在 GitLab 项目中进入设置页面。 在左侧导航栏中选择 “Webhooks”&#xff08;Web钩子&#xff09;。 在 Webhooks 页面中点击 “…...

借助CIFAR10模型结构理解卷积神经网络及Sequential的使用

CIFAR10模型搭建 CIFAR10模型结构 0. input : 332x32&#xff0c;3通道32x32的图片 --> 特征图(Feature maps) : 3232x32即经过32个35x5的卷积层&#xff0c;输出尺寸没有变化&#xff08;有x个特征图即有x个卷积核。卷积核的通道数与输入的通道数相等&#xff0c;即35x5&am…...

Java # Java基础八股

1、JVM、JRE、JDK之间的关系 个人理解&#xff1a;JVM可以帮助屏蔽底层的操作系统&#xff0c;使程序一次编译到处都可以运行&#xff0c;JVM可以运行class文件。JRE是java文件运行的环境&#xff0c;但不能新建程序&#xff0c;JRE包含JVM。JDK功能最齐全&#xff0c;包含了编…...

【Spring Boot】SpringBoot 2.6.6 集成 SpringDoc 1.6.9 生成swagger接口文档

文章目录 前言一、SpringDoc是什么&#xff1f;二、使用步骤1.引入库2.配置类3.访问测试 总结其他配置立个Flag 前言 之前常用的SpringFox在2020年停止更新了&#xff0c;新项目集成SpringFox出来一堆问题&#xff0c;所以打算使用更活跃的SpringDoc&#xff0c;这里简单介绍一…...

【算法】快速排序 详解

快速排序 详解 快速排序1. 挖坑法2. 左右指针法 &#xff08;Hoare 法&#xff09;3. 前后指针法4. 快排非递归 代码优化 排序&#xff1a; 排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&…...

架构师spring boot 面试题

spring boot 微服务有哪些特点&#xff1f; Spring Boot 微服务具有以下特点&#xff1a; 独立性&#xff1a;每个微服务都是独立的部署单元&#xff0c;有自己的代码库和数据库。这使得微服务可以独立开发、测试、部署和扩展。 分布式&#xff1a;微服务架构将一个大型应用程…...

电商系统架构设计系列(十一):在电商的交易类系统中,如何正确地使用 Redis 这样的缓存系统呢?需要考虑哪些问题?

上篇文章中&#xff0c;我给你留了一个思考题&#xff1a;在电商的交易类系统中&#xff0c;如何正确地使用 Redis 这样的缓存系统呢&#xff1f;需要考虑哪些问题&#xff1f; 这篇文章&#xff0c;我们来聊聊。 引言 我们知道&#xff0c;大部分面向公众用户的互联网系统&a…...

MySQL数据库和表的操作

数据库基础 存储数据用文件就可以了&#xff0c;为什么还要弄个数据库? 文件保存数据有以下几个缺点&#xff1a; 1、文件的安全性问题 2、文件不利于数据查询和管理 3、文件不利于存储海量数据 4、文件在程序中控制不方便 数据库存储介质&#xff1a; 磁盘 内存 为了解决上…...

DAY-01--分布式微服务基础概念

一、项目简介 了解整体项目包含后端、前端、周边维护。整个项目的框架知识。 二、分布式基础概念 1、微服务 将应用程序 基于业务 拆分为 多个小服务&#xff0c;各小服务单独部署运行&#xff0c;采用http通信。 2、集群&分布式&节点 集群是个物理形态&#xff0c;…...

记:一次关于paddlenlp、python、版本之间的兼容性问题

兼容版本 Python 3.10.8 absl-py1.4.0 accelerate0.19.0 addict2.4.0 aiofiles23.1.0 aiohttp3.8.3 aiosignal1.3.1 alembic1.10.4 aliyun-python-sdk-core2.13.36 aliyun-python-sdk-kms2.16.0 altair4.2.2 altgraph0.17.3 aniso86019.0.1 antlr4-python3-runtime4.9.3 anyi…...

MyBatis配置及单表操作

文章目录 一. MyBatis概述二. MyBatis项目的创建1. 准备一个数据表2. 创建项目 三. MyBatis的使用1. 基本使用2. SpringBoot单元测试 四. 使用MyBatis实现单表操作1. 查询2. 修改3. 删除4. 新增 五. 基于注解完成SQL 一. MyBatis概述 MyBatis 是一款优秀的持久层框架&#xff…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...