学点儿Java_Day10_集合框架(List、Set、HashMap)

news/2024/4/28 9:22:10/文章来源:https://blog.csdn.net/Mr_Tang4/article/details/137026613

1 简介

在这里插入图片描述
在这里插入图片描述

ArrayList: 有序(放进去顺序和拿出来顺序一致),可重复
HashSet: 无序(放进去顺序和拿出来顺序不一定一致),不可重复

	@Testpublic void test1() {String[] array = new String[3];//List: 有序 可重复//有序: 放入顺序 与  拿出顺序一致,就是有序
//        List<String> list = new ArrayList<>();//多态 声明成父类, new子类类型ArrayList<String> list = new ArrayList<>();list.add("Java");list.add("UI");list.add("H5");list.add("H5");list.add("Python");list.add("aa");for (String str : list) {System.out.println(str);}System.out.println("------------------");//Set:无序 不重复//无序: 放入顺序与拿出顺序不一定一致,可能不一致HashSet<String> set = new HashSet<>();
//        Set<String> set = new HashSet<>();//多态, 声明成父类, new子类类型set.add("Java");set.add("UI");set.add("H5");set.add("H5");set.add("aa");for (String str : set) {System.out.println(str);}}

2 ArrayList和LinkedList区别

在这里插入图片描述
ArrayList和LinkedList的大致区别如下:
1.ArrayList是实现了基于动态数组的数据结构LinkedList基于链表的数据结构
2.对于随机访问get和set,ArrayList绝对优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

ArrayList内部是使用可増长数组实现的,所以是用get和set方法是花费常数时间的,但是如果插入元素和删除元素,除非插入和删除的位置都在表末尾,否则代码开销会很大,因为里面需要数组的移动
LinkedList是使用双链表实现的,所以get会非常消耗资源,除非位置离头部很近。但是插入和删除元素花费常数时间。

jdk1.7版本之前创建集合对象必须把前后的泛型都写上
ArrayList<String> list = new ArrayList<String>();
jdk1.7版本之后,=号后面的泛型可以省略,后面的泛型可以根据前面的泛型推导出来
ArrayList<String> list = new ArrayList<>();

3 队列

Queue先进先出 FIFO Firt In First Out
客服电话、12306排队买票、滴滴打车
在这里插入图片描述

LinkedList linkedList = new LinkedList();
linkedList.addFirst("A");
linkedList.removeFirst();
linkedList.addLast("B");
linkedList.removeLast();

基于LinkedList的addFirst()removeFirst()addLast()removeLast()方法可以实现队列两种数据结构

4 Map

在这里插入图片描述
Set<Entry<String, String>> set = map.entrySet();
map.keySet();

Map接口
1、Collection中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储。
2、Map中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以找对所对应的值。
3、Collection中的集合称为单列集合,Map中的集合称为双列集合
4、需要注意的是,Map中的集合不能包含重复的键,值可以重复每个键只能对应一个值
5、Map中常用的集合为HashMap集合、LinkedHashMap集合。

Map集合遍历键找值方式:

一、键找值方式:即通过元素中的键,获取键所对应的值
1.获取Map集合中所有的键,由于键是唯一的,所以返回一个Set集合存储所有的键
在这里插入图片描述

2.遍历键的Set集合,得到每一个键
3.根据键,获取键所对应的值
在这里插入图片描述

二、Map集合遍历键值对方式
键值对方式:即通过集合中每个键值对(Entry)对象,获取键值对(Entry)对象中的键与值。
操作步骤与图解:
1.获取Map集合中,所有的键值对(Entry)对象,以Set集合形式返回。
在这里插入图片描述

2.遍历包含键值对(Entry)对象的Set集合,得到每一个键值对(Entry)对象
3.通过键值对(Entry)对象,获取Entry对象中的键与值。
在这里插入图片描述
在这里插入图片描述

	@Testpublic void test2() {//Map<String, String> map = new HashMap<>();//多态, 声明成父类, new子类类型HashMap<String, String> map = new HashMap<>();//HashMap不是接口map.put("CN", "中国");map.put("US", "美国");map.put("UK", "英国");Set<Map.Entry<String, String>> set = map.entrySet();//entry Set集合//① 遍历map 转为遍历setfor (Map.Entry<String, String> entry : set) {System.out.println(entry.getKey() + ": " + entry.getValue());//放入顺序和拿出顺序不一定一样}System.out.println("-----------------");//②String country = map.get("CN");System.out.println(country);System.out.println("-----------------");//key不能重//② 根据key遍历Set<String> ketSet = map.keySet();for (String key : ketSet) {System.out.println(key + ": " + map.get(key));}}

注意:Map集合不能直接使用迭代器或者foreach进行遍历。但是转成Set之后就可以使用了

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

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

相关文章

【NLP笔记】大模型prompt推理(提问)技巧

文章目录 prompt概述推理&#xff08;提问&#xff09;技巧基础prompt构造技巧进阶优化技巧prompt自动优化 参考链接&#xff1a; Pre-train, Prompt, and Predict: A Systematic Survey of Prompting Methods in Natural Language Processing预训练、提示和预测&#xff1a;NL…

【并发】第二篇 ThreadLocal详解

导航 一. ThreadLocal 简介二. ThreadLocal 源码解析1. get2. set3 .remove4. initialValue三. ThreadLocalMap 源码分析1. 构造方法2. getEntry()3. set()4. resize()5. expungeStaleEntries()6. cleanSomeSlots()7. nextIndex()8. remove()9. 总结ThreadLocalMap四. 内存泄漏…

HarmonyOS 应用开发之显式Want与隐式Want匹配规则

在启动目标应用组件时&#xff0c;会通过显式 Want 或者隐式 Want 进行目标应用组件的匹配&#xff0c;这里说的匹配规则就是调用方传入的 want 参数中设置的参数如何与目标应用组件声明的配置文件进行匹配。 显式Want匹配原理 显式 Want 匹配原理如下表所示。 名称类型匹配…

NanoMQ的安装与部署

本文使用docker进行安装&#xff0c;因此安装之前需要已经安装了docker 拉取镜像 docker pull emqx/nanomq:latest 相关配置及密码认证 创建目录/usr/local/nanomq/conf以及配置文件nanomq.conf、pwd.conf # # # # MQTT Broker # # mqtt {property_size 32max_packet_siz…

使用苹果应用商店上架工具实现应用快速审核与发布

摘要 移动应用app上架是开发者关注的重要环节&#xff0c;但常常会面临审核不通过等问题。为帮助开发者顺利完成上架工作&#xff0c;各种辅助工具应运而生。本文探讨移动应用app上架原理、常见辅助工具功能及其作用&#xff0c;最终指出合理使用工具的重要性。 引言 移动应…

第4章.精通标准提示,引领ChatGPT精准输出

标准提示 标准提示&#xff0c;是引导ChatGPT输出的一个简单方法&#xff0c;它提供了一个具体的任务让模型完成。 如果你要生成一篇新闻摘要。你只要发送指示词&#xff1a;汇总这篇新闻 : …… 提示公式&#xff1a;生成[任务] 生成新闻文章的摘要&#xff1a; 任务&#x…

Stable Diffusion WebUI 生成参数:脚本(Script)——提示词矩阵、从文本框或文件载入提示词、X/Y/Z图表

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 大家好,我是水滴~~ 在本篇文章中,我们将深入探讨 Stable Diffusion WebUI 的另一个引人注目的生成参数——脚本(Script)。我们将逐一细说提示词矩阵、从文本框或文件导入提示词,…

跑腿小程序|基于微信小程序的跑腿平台小程序设计与实现(源码+数据库+文档)

跑腿平台小程序目录 目录 基于微信小程序的跑腿平台小程序设计与实现 一、前言 二、系统设计 三、系统功能设计 1、用户信息管理 2、跑腿任务管理 3、任务类型管理 4、公告信息管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、…

如何安全地添加液氮到液氮罐中

液氮是一种极低温的液体&#xff0c;它在许多领域广泛应用&#xff0c;但在处理液氮时需谨慎小心。添加液氮到液氮罐中是一个常见的操作&#xff0c;需要遵循一些安全准则以确保操作人员的安全和设备的完整性。 选择合适的液氮容器 选用专业设计用于存储液氮的容器至关重要。…

SnapGene 5 for Mac 分子生物学软件

SnapGene 5 for Mac是一款专为Mac操作系统设计的分子生物学软件&#xff0c;以其强大的功能和用户友好的界面&#xff0c;为科研人员提供了高效、便捷的基因克隆和分子实验设计体验。 软件下载&#xff1a;SnapGene 5 for Mac v5.3.1中文激活版 这款软件支持DNA构建和克隆设计&…

线性代数 - 应该学啥 以及哪些可以交给计算机

AI很热&#xff0c;所以小伙伴们不免要温故知新旧时噩梦 - 线代。 &#xff08;十几年前&#xff0c;还有一个逼着大家梦回课堂的风口&#xff0c;图形学。&#xff09; 这个真的不是什么美好的回忆&#xff0c;且不说老师的口音&#xff0c;也不说教材的云山雾绕&#xff0c;单…

JVM(一)——内存结构

一. 前言 1、什么是 JVM? 1&#xff09;定义&#xff1a; Java Virtual Machine - java 程序的运行环境&#xff08;java 二进制字节码的运行环境&#xff09; 2&#xff09;好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收功能数组下标越…

React Native 应用打包上架

引言 在将React Native应用上架至App Store时&#xff0c;除了通常的上架流程外&#xff0c;还需考虑一些额外的优化策略。本文将介绍如何通过配置App Transport Security、Release Scheme和启动屏优化技巧来提升React Native应用的上架质量和用户体验。 配置 App Transport…

基于振弦采集仪的土体变形监测与分析

基于振弦采集仪的土体变形监测与分析 工程监测振弦采集仪是一种专用于工程监测中的振弦测量的仪器。它能够实时采集及记录结构物的振动信号&#xff0c;以评估结构物的健康状况、安全性能等。它通常由振弦传感器、数据采集模块和数据处理软件组成。振弦传感器负责测量结构物的…

uniApp使用XR-Frame创建3D场景(5)材质贴图的运用

上一篇讲解了如何在uniApp中创建xr-frame子组件并创建简单的3D场景。 这篇我们讲解在xr-frame中如何给几何体赋予贴图材质。 先看源码 <xr-scene render-system"alpha:true" bind:ready"handleReady"><xr-node><xr-assets><xr-asse…

联想 lenovoTab 拯救者平板 Y700 二代_TB320FC原厂ZUI_15.0.677 firmware 线刷包9008固件ROM root方法

联想 lenovoTab 拯救者平板 Y700 二代_TB320FC原厂ZUI_15.0.677 firmware 线刷包9008固件ROM root方法 ro.vendor.config.lgsi.market_name拯救者平板 Y700 ro.vendor.config.lgsi.en.market_nameLegion Tab Y700 #ro.vendor.config.lgsi.short_market_name联想平板 ZUI T # B…

2024多云管理平台CMP排名看这里!

随着云计算技术的迅猛发展&#xff0c;多云管理平台CMP应运而生。多云管理平台CMP仅能够简化对多个云环境的统一管理&#xff0c;还能提高资源利用效率和降低成本。因此了解多云管理平台CMP品牌是必要的。2024多云管理平台CMP排名看这里&#xff01;仅供参考哈&#xff01; 20…

Java八股文(JVM)

Java八股文のJVM JVM JVM 什么是Java虚拟机&#xff08;JVM&#xff09;&#xff1f; Java虚拟机是一个运行Java字节码的虚拟机。 它负责将Java程序翻译成机器代码并执行。 JVM的主要组成部分是什么&#xff1f; JVM包括以下组件&#xff1a; ● 类加载器&#xff08;ClassLoa…

【SpringBoot从入门到精通】03_SpringBoot自动配置原理

三、SpringBoot自动配置原理 我们通过编写SpringBoot HelloWorld程序&#xff0c;体会到了其强大与便捷&#xff0c;它的这些功能都是基于SpringBoot的依赖管理与自动配置。 3.1 核心特性 依赖管理 父项目做依赖管理 <!-- 当前项目的父项目&#xff1a;依赖管理 --> &…

MySQL进阶-----索引的语法与SQL性能分析

目录 前言 一、索引语法 1.SQL语法 2.案例演示 二、SQL性能分析 三、慢查询日志 1.开启日志 2.测试样例 四、profile详情 1.开启profile 2.profile测试SQL语句 五、explain详情 1.语法结构 2.执行顺序示例&#xff08;id&#xff09; 3.执行性能示例(type) 前言 本…