java —— 集合

一、集合的概念

集合可以看做是一个存储对象的容器,与数组不同的是集合可以存储不同类型的对象,但开发中一般不这样做。集合不能存储基本类型的对象,如果存储则需要将其转化为对应的包装类。

二、集合的分类

集合分为 Collection 和 Map 两大接口,具体的实现类继承自这两大接口。

(一)Collection 接口

Collection 接口下面有 3 个子接口,可以视为 3 个分支,常用的是 List 接口和 Set 接口:

1、List 子接口

特点:存放的数据有序且允许重复,主要的实现类有 ArrayList(重点)、LinkedList、Vector,这三个实现类用法相同,具体可见:java —— ArrayList 使用方法

区别:LinkedList 增加了 .addFirst() 方法和 .addLast() 方法,分别表示在首尾添加。

public static void main(String[] args)
{LinkedList list=new LinkedList();list.add("Tom");list.add("Jerry");list.addFirst("Spike");list.addLast("Snoopy");System.out.println(list.get(0));System.out.println(list.get(list.size()-1));
}

2、Set 子接口

特点:存放的对象无序且不允许重复,方法与 ArrayList 相同,但由于无序,因而没有 .get() 方法,常见的实现类有 HashSet、TreeSet。

区别:HashSet 内部对象散列存放,完全无序;TreeSet 内部按照自然升序排列,与添加的先后顺序无关。自定义的类如果要在 TreeSet 内部实现自然排序,要么实现 Comparable 接口,要么自定义 Comparator 比较器。

(二)Map 接口

特点:Map 接口的实现类采用键值对的形式存储对象,主要的实现类是 HashMap、TreeMap、HashTable。虽然内部存储无序,但由于有键值对的存在,可以通过 .get(key k) 的方法获取元素。

区别:HashMap 允许键出现一次“null”,值允许为空;TreeMap 内部按照键的自然升序排列,键不允许为“null”,值允许为空;HashTable 键和值都不允许为空。

常用方法:

.containsKey(key k)判断是否包含指定的键
.containsValue(value v)判断是否包含指定的值
.get(key k)根据键获取值
.isEmpty()判断是否为空
.keySet()返回一个set集合,包含所有的键
.values()返回一个collection集合,包含所有的值
.put(key k,value v)添加元素
.putAll(Map m)将集合m添加至本集合
.remove(key k,value v)根据键删除值
.size()获取集合长度

三、服务集合的三大工具

(一)Iterator 迭代器

用法可见:java —— ArrayList 使用方法 中的 “八、迭代器”。

(二)Comparable 接口和 Comparator 比较器

用法可见:java —— Comparable 接口和 Comparator 比较器

(三)Collections 工具类

Collections 是一个操作 List、Set、Map 等集合的工具类,它提供了一系列静态方法用于对集合执行查询、排序、修改等操作。

1、排序

① 升序:Collections.sort(List list)

② 降序:Collections.reverse(List list)

③ 随即排列:Collections.shuffle(List list)

public static void main(String[] args)
{ArrayList<Integer> ar=new ArrayList();ar.add(5);ar.add(4);ar.add(7);//升序Collections.sort(ar);Iterator ite1=ar.iterator();while(ite1.hasNext()){System.out.println(ite1.next());}//降序Collections.reverse(ar);Iterator ite2=ar.iterator();while(ite2.hasNext()){System.out.println(ite2.next());}//随即排列Collections.shuffle(ar);Iterator ite3=ar.iterator();while(ite3.hasNext()){System.out.println(ite3.next());}
}

2、 修改

① 交换:Collections.swap(List list,int i,int j)

public static void main(String[] args)
{ArrayList<Integer> ar=new ArrayList();ar.add(5);ar.add(4);ar.add(7);Collections.swap(ar,0,2);   //将索引0和2的元素进行交换Iterator ite=ar.iterator();while(ite.hasNext()){System.out.println(ite.next());}
}

② 填充:Collections.fill(List list, Object obj)

public static void main(String[] args)
{ArrayList<Integer> ar=new ArrayList();ar.add(5);ar.add(4);ar.add(7);Collections.fill(ar,10);   //将集合内元素变成10Iterator ite=ar.iterator();while(ite.hasNext()){System.out.println(ite.next());}
}

3、使集合不可变

public static void main(String[] args)
{ArrayList<Integer> ar=new ArrayList();ar.add(5);ar.add(4);ar.add(7);Collection cc=Collections.unmodifiableCollection(ar);   //将集合不可变并返回一个集合cc,此时cc不能执行任何变更    
}

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

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

相关文章

React-表单受控绑定

概念&#xff1a;使用React组件的状态&#xff08;useState&#xff09;控制表单的状态 1.准备一个React状态值 2.通过value属性绑定状态&#xff0c;通过onChange属性绑定状态同步的函数

2024年5月总结及随笔之快乐五一

1. 回头看 日更坚持了517天。 读《天才与算法&#xff1a;人脑与AI的数学思维》更新完成 2023年至2024年5月底累计码字1177253字&#xff0c;累计日均码字2277字。 2024年5月码字95875字&#xff0c;同比增长66.7%&#xff0c;环比增长9.3%&#xff0c;日均码字数3092字&am…

STM32 定时器与PWM的LED控制

学习目标&#xff1a; 1. 使用定时器的某一个通道控制LED周期性亮灭&#xff1b; 2. 采用定时器PWM模式&#xff0c;让 LED 以呼吸灯方式渐亮渐灭。 一、定时器 1、STM32定时器介绍 STMicroelectronics是STM32微控制器中的重要块&#xff0c;具有丰富的外设和功能&#xff0…

Dijkstra求最短路篇一(全网最详细讲解两种方法,适合小白)(python,其他语言也适用)

前言&#xff1a; Dijkstra算法博客讲解分为两篇讲解&#xff0c;这两篇博客对所有有难点的问题都会讲解&#xff0c;小白也能很好理解。看完这两篇博客后保证收获满满。 本篇博客讲解朴素Dijkstra算法&#xff0c;第二篇博客讲解堆优化Dijkstra算法Dijkstra求最短路篇二(全网…

知识运维概述

文章目录 知识运维研究现状技术发展趋势 知识运维 由于构建全量的行业知识图谱成本很高&#xff0c;在真实的场景落地过程中&#xff0c;一般遵循小步快走、快速迭代的原则进行知识图谱的构建和逐步演化。知识运维是指在知识图谱初次构建完成之后&#xff0c;根据用户的使用反馈…

小白跟做江科大32单片机之对射式红外传感器计次

原理部分 1中断示意图&#xff0c;中断会打断主函数的执行&#xff0c;终端执行完成之后再返回主函数继续执行 2.STM32中断 这些灰色的是内核中断 这些白色的是普通中断 3.NVIC统一管理中断&#xff0c;每个中断通道都拥有16个可编程的优先等级&#xff0c;可对优先级进行分组…

Redis缓存(笔记一:缓存介绍和数据库启动)

目录 1、NoSQL数据库简介 2、Redis介绍 3、Redis(win系统、linux系统中操作) 3.1 win版本Redis启动 3.2 linux版本Redis启动 1、NoSQL数据库简介 技术的分类&#xff1a;&#xff08;发展史&#xff09; 1、解决功能性的问题&#xff1a;Java、Jsp、RDBMS、Tomcat、HTML、…

Filter和ServletContext和Listener

目录 Filter案例 解决全站乱码问题 登录权限校验 ServletContext对象 Listener&#xff08;监听器&#xff09; Filter案例 解决全站乱码问题 我们每次访问每个servlet都要书写处理请求和响应乱码的代码&#xff0c;这样代码十分冗余&#xff0c;所以我们可以在过滤中 We…

Java——变量

一、变量介绍 变量就是申请内存来存储值。也就是说&#xff0c;当创建变量的时候&#xff0c;需要在内存中申请空间。内存管理系统根据变量的类型为变量分配存储空间&#xff0c;分配的空间只能用来储存该类型数据。 1、变量声明和初始化 变量的声明&#xff1a; int a; i…

44-1 waf绕过 - WAF的分类

一、云 WAF 通常包含在 CDN 中的 WAF。在配置云 WAF 时&#xff0c;DNS 需要解析到 CDN 的 IP 上。请求 URL 时&#xff0c;数据包会先经过云 WAF 进行检测&#xff0c;如果通过检测&#xff0c;再将数据包流向主机。 二、硬件IPS/IDS防护、硬件WAF 硬件IPS/IDS防护&#xff…

VS Code 开发小技巧

VS Code的开发小技巧 添加代码片段 平时开发的时候&#xff0c;可以快速创建一个空白的模板。 一个快速生成代码片段的网站&#xff1a;https://snippet-generator.app/ 打开网站&#xff0c;把常用的模板代码复制进去&#xff0c;就会自动生成VS Code可以使用的代码片段了。…

从零到一建设数据中台 - 关键技术汇总

一、数据中台关键技术汇总 语言框架&#xff1a;Java、Maven、Spring Boot 数据分布式采集&#xff1a;Flume、Sqoop、kettle 数据分布式存储&#xff1a;Hadoop HDFS 离线批处理计算&#xff1a;MapReduce、Spark、Flink 实时流式计算&#xff1a;Storm/Spark Streaming、…

2024.05.30更新票星球抢购软件

文章目录 软件功能订阅须知早期代码软件功能 自持自定义搜索演唱会信息支持添加、删除观影人信息支持多账号并发抢票支持捡漏模式支持IP代理订阅须知 订阅后如果有问题,请联系博主,如果不懂可以免费提供讲解和远程服务早期代码 def enter_concert(self):print(u###打开浏览器…

Unity DOTS技术(一)简介

文章目录 一.概述二.将会介绍的内容三.DOTS技术与传统方式的不同传统问题DOTS技术 四.插件安装 一.概述 传统的游戏开发中,如果有成千上万的物体在场景中运动,那么你一定会认为是疯了.但有了Dost技术这一些都将变成可能.如图场景中有10000个物体在同时运动,帧率即能保持在60Fp…

Science:论文写不出来?这三个方法让你一天完成一篇论文

我是娜姐 迪娜学姐 &#xff0c;一个SCI医学期刊编辑&#xff0c;探索用AI工具提效论文写作和发表。 众所周知&#xff0c;干了学术研究这一行&#xff0c;论文就是你研究质量和数量的衡量标准&#xff0c;可以说&#xff0c;你的一切“输入”-读文献、做实验、分析数据&#x…

k8s之PV、PVC

文章目录 k8s之PV、PVC一、存储卷1、存储卷定义2、存储卷的作用2.1 数据持久化2.2 数据共享2.3 解耦2.4 灵活性 3、存储卷的分类3.1 emptyDir存储卷3.1.1 定义3.1.2 特点3.1.3 用途3.1.4 示例 3.2 hostPath存储卷3.2.1 定义3.2.2 特点3.2.3 用途3.2.4 示例 3.3 NFS存储卷3.3.1 …

【C语言】柔性数组

前言 你是否听说过柔性数组呢&#xff1f;如果没有的话&#xff0c;就一起了解一下吧。 &#xff08;没有malloc free calloc realloc 四个函数的前置知识的朋友最好先阅读一下我的“动态内存管理”一文&#xff0c;因为下面会涉及到。&#xff09; 介绍 C99中&#xff0c;…

python找出100~999之间的水仙花数字

水仙花数字&#xff1a;个位&#xff0c;十位&#xff0c;百位的立方之和等于这个数本身 例如&#xff1a;153 1^35^33^3 for i in range(100, 1000):bw i // 100sw i % 100 // 10gw i % 10if bw ** 3 sw ** 3 gw ** 3 i:print(i)

LeetCode题练习与总结:路径总和Ⅱ--113

一、题目描述 给你二叉树的根节点 root 和一个整数目标和 targetSum &#xff0c;找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 示例 1&#xff1a; 输入&#xff1a;root [5,4,8,11,null,13,4,7,2,null,null,5,1], target…

FreeRTOS同步互斥与通信

本章简介&#xff1a; 本章是概述性的内容。可以把多任务系统当做一个团队&#xff0c;里面的每一个任务就相当于团队里的一个人。团队成员之间要协调工作进度(同步)、争用会议室(互斥)、沟通(通信)。多任务系统中所涉及的概念&#xff0c;都可以在现实生活中找到例子。 各类RT…