Java复习01 集合概念

news2025/1/17 6:12:35

Java复习01 集合

在Java中,集合(Collections)是一种用来存储一组对象的结构。想象一下有一个装东西的箱子,这个箱子可以装很多不同类型的东西,例如书、DVD或者玩具。Java的集合也是这样,但是它专门用来装载对象(比如字符串、整数等等)。

现在,让我们区分CollectionMap,以及Collection里的ListSet

1. Collection 和 Map 的区别

  • Collection: 这是一个单列集合,它的意思是每一个元素只包含一个对象(就像一串单独的珍珠),例如一个珍珠串。在Collection接口下面有不同类型的集合,比如ListSet
  • Map: 这是一种双列集合,意思是它存储的每个元素包含两部分:一个键(Key)和一个值(Value),就像是一个词典。在词典中,每个单词(键)都对应一个定义(值)。在Java的Map中,你可以通过键来快速找到对应的值。

2. Collection 里面 List 和 Set 的区别

这两者都是Collection的子接口,但是它们存储元素的方式有所不同:

  • List: 想象一下你有一个购物清单,你可以按照顺序在上面写下你要买的东西,就像牛奶、面包、牛奶。注意,你可以写下多次牛奶。这表明List是有序的,并且可以包含重复的元素。在Java的List中,每个元素都有一个特定的位置,就像购物清单上的物品。
  • Set: 现在假设你是一个集邮爱好者,你的集邮册里面不会想有重复的邮票,每一枚邮票都是独一无二的。这个集邮册就像是Java中的Set,它不允许重复的元素,也不保证元素的顺序。所以,如果你尝试把相同的邮票加入集邮册,它就会拒绝这个重复的。

3. List 里面 ArrayList 和 LinkedList 的区别

ArrayListLinkedList都是Java中List接口的两种不同实现。我们可以用一个比喻来解释它们之间的区别:

想象一下你有一排学生坐在教室里,他们是按照座位号顺序排列的。这就像一个ArrayList,每个学生都有一个固定的座位号(也就是在列表中的索引位置),你可以很快地找到任何一个学生(元素)只要知道他们的座位号。ArrayList在内部使用一个数组来存储元素,因此访问任何元素都非常快,就像直接叫一个学生的座位号一样简单。

现在想象一下,有一列孩子站成一排等着上滑梯。每个孩子只知道前一个和后一个孩子是谁。如果你想找到队列中的某个特定孩子,你需要从头或者从尾开始,一个接一个地问直到找到那个孩子。这个队列就像是一个LinkedList,每个元素都保持着与前一个和后一个元素的连接,但是它们并不知道自己在队列中的具体位置。LinkedList在内部使用双向链表来存储元素,因此插入和删除元素非常快,因为这就像是让一个孩子加入或离开滑梯队列一样简单。

总结一下ArrayListLinkedList的主要区别:

  • ArrayList:
    • 优点: 快速随机访问性能(快速定位元素)。
    • 缺点: 在列表中间插入和删除元素可能很慢,因为这可能涉及到移动元素来填补空白或者创建空间。
    • 适用场景: 当你需要频繁地通过索引访问元素,而且添加或删除操作主要发生在列表的末尾时。
  • LinkedList:
    • 优点: 插入和删除元素通常更快,尤其是在列表中间。
    • 缺点: 随机访问性能较慢(查找元素需要时间)。
    • 适用场景: 当你需要频繁地在列表中间进行添加或删除操作时。

4. Map 里面 HashMap()

假设我们有一个巨大的储物柜(HashMap),而每个储物格可以放你的东西,比如运动鞋。

每个储物格都有一个号码,但是这个号码不是随便给的,它是通过你鞋子的某个特别标记计算出来的。这个过程就像一个数学魔法,可以把鞋子的标记转化成储物格的号码。所以当你需要存储一双鞋时,你就使用这个魔法计算出储物格号码,然后把鞋子放进去。

现在,当你下次来,想要取回你的鞋子,你不需要去每个储物格门口找,你只需要记住那个特别标记,再用同样的魔法计算一次,就能直接知道你的鞋子在哪个储物格了。这样你就可以很快地取到你的鞋子。

但是,有时候会出现一个问题。可能会有两双不同的鞋,它们的特别标记通过魔法计算出来的储物格号码是一样的。这就像两个不同的学生被分配到了同一个宿舍。HashMap的解决办法是在同一个储物格里面加个小盒子,这样每双鞋都有自己的小盒子。虽然这样找鞋子可能会慢一点,因为你需要检查每个小盒子,但通常来说,这个魔法计算得很好,所以每个储物格里只有一两个小盒子,你还是很快就能找到你的鞋子。

HashMap就像这个巨大的储物柜,帮你快速地存储和取出东西。每次你想存东西,它都会帮你找到一个地方放。而每次你想取东西时,只要你知道那个特别的标记,你就能迅速找到它们。这就是HashMap的魔法!

4.1 HashMap的可能问题
  1. 基本概念: 他们可能会问你什么是HashMap ?
    • “HashMap是Java中的一个集合类,它可以存储键值对,并且可以快速地通过键来访问值。它是基于哈希表实现的,所以它的获取和插入的速度很快,因为它通过哈希函数直接定位到它的值的存储位置。”
  2. 内部工作原理: 他们可能会询问HashMap是如何工作的 ?
    • “HashMap通过哈希函数来计算键的哈希码,哈希码决定了键值对在内部数组中的存储位置。如果有两个不同的键产生了相同的哈希码,并且哈希函数将它们定位到了相同的位置,这种情况称为哈希冲突。HashMap通过链表或红黑树来解决冲突,这意味着每个位置实际上可以存储多个键值对。”
  3. 性能问题: 面试官可能会问到性能,比如HashMap的时间复杂度 ?
    • “HashMap的getput操作通常有常数时间的性能,即O(1),但这依赖于哈希函数的质量和键值对的分布。如果发生了很多哈希冲突,性能可能会退化至O(n),其中n是哈希桶中元素的数量。”
  4. 容量和负载因子: 关于HashMap的初始化容量和负载因子 ?
    • “HashMap有一个初始容量值,它是存储元素的内部数组的大小,还有一个负载因子,用来衡量HashMap在自动增加其容量(重新哈希)之前可以有多满。默认的负载因子是0.75,这是一个在时间和空间成本之间的折衷。”
  5. 线程安全: 如果问到线程安全 ?
    • “HashMap本身不是线程安全的,如果在多线程环境中使用HashMap,需要额外的同步措施。或者,可以使用ConcurrentHashMap,它是专为多线程环境设计的。
  6. 和其他Map的比较: 也许会让你跟其他Map实现比较,比如HashtableTreeMap ?
    • “与Hashtable比较,HashMap是非同步的,因此在单线程环境下速度更快,而Hashtable是线程安全的。与TreeMap比较,HashMap通常更快,因为TreeMap保持键的排序,其getput操作的时间复杂度为O(log n)。”

总结一下:

  • Collection: 一组单一元素的集合,可以是有序的(List),也可以是唯一的(Set)。
  • Map: 一组成对的键值对集合,可以通过键来快速查找值。
  • List: 一个可以包含重复元素并且有序的集合。
  • Set: 一个不可以有重复元素,元素位置也不固定的集合。

在使用Java集合框架时,你可以根据需要存储的数据类型和数据操作来选择最合适的集合类型。
在这里插入图片描述

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

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

相关文章

如何利用工业以太网关实现上位机无线远程控制多台plc通讯?

组态软件与西门子S7系列PLC及三菱PLC间的无线通信测试需要用到以下设备: l 西门子PLC型号:S7-200Smart 2台 l 三菱PLC型号:FX5U 2台 l 上位机:力控V7.1 1台 l 无线通讯终端(网口版)——DTD418MB 3块…

群控软件代理,群控服务器配置要求

目录 前言 硬件要求 操作系统要求 代理软件要求 网络要求 1. 在群控服务器上安装Shadowsocks软件 2. 配置本地代理软件 3. 配置浏览器代理 前言 群控软件代理是指在进行群控活动时,利用代理服务器来隐藏真实的IP地址,以保护个人隐私或绕过一些网…

概率与常见的概率分布

概率是数据分析、机器学习中最基础的知识。也是在生活中最实用的一门学科,学了很多大道理不一定能过好一生,学好概率则有一定概率会变得更好。为大概率坚持,为小概率备份。 概率与分布 要想了解概率,首先得搞清楚概率和概率分布的…

「飞桨星河社区创作者激励计划」全新上线!丰富权益,等你领取~

为了助力更多的创作者实现在飞桨星河社区的成长,同时鼓励创作者们积极投入,记录创作者们的高光时刻,重磅推出**「创作者成长体系」,同时推出「每周精选&月度榜单」**活动,期待你一同加入精彩纷呈的AI学习与创作之旅…

学成在线_课程预览-视频播放测试_视频加载出错

问题 在进行课程预览界面的视频播放测试时界面提示视频加载出错。 如图所示JAVA特性讲解的第一小节视频加载出错。 查看课程计划会发现该小节已经进行了视频关联。 问题原因 此课程小节的关联视频在我们自己的minIO的桶中并不存在。所以前端从数据库中拿到的关联视频url是…

AI情报专刊来啦!《“AI换脸”威胁研究与安全策略》

目录 “AI换脸”常见的诈骗套路 1、伪造账号造谣传谣 2、冒充熟人进行诈骗 3、伪造身份申请银行贷款 4、“网络钓鱼”更加难以识别 5、冒充他人远程面试入职 6、冒名登录盗走银行余额 “AI换脸”的产业链 “AI换脸”使用到的技术 人脸识别和关键点检测 图像/视频合成技术 生成对…

【兔子机器人】修改GO、车轮电机ID(软件方法、硬件方法)以及修正VMC腿部初始化夹角

一、GO电机修改ID 1、硬件方法 利用上位机直接修改GO电机的id号: 打开调试助手,点击“调试”,查询电机,修改id号,即可。 但先将四个GO电机连接线拔掉,不然会将连接的电机一并修改。 利用24V电源给GO电机…

Redis命名设计

可读性和管理性 以项目名为前缀(防止key冲突),用冒号分隔,比如项目名:表名:id zh(知乎):news_data(新闻数据):2(主键id) zh:news_data:2 精简性 key的命名,尽量精简,key的名字长度对内存的占用不可忽视,我们来实际…

成都产业园排名出炉!金牛区这个园区成数字产业聚集地

近日,成都产业园排名榜单正式发布,可以看出金牛区成数字产业聚集地,其中,备受瞩目的国际数字影像产业园荣登榜首。这一排名不仅彰显了国际数字影像产业园在数字产业领域的卓越表现,更凸显了成都作为西部重要城市在科技…

Redis及其常用命令(二)

SortedSet类型 在此类型中,每个元素都有一个分数 key -> string value -> sorted([socre,member],[score,member]...) # 添加元素 zadd key score member # 遍历集合 zrange key start stop [withscores] #升序 zrevrange key start stop [withscores]#降序…

如何“使用Docker安装compose,在CentOS7”?

1、下载地址 Releases docker/compose GitHub 2、下载好,上传服务器 3、 4、拷贝到/usr/local/bin/docker-compose目录下 cp docker-compose-linux-x86_64 /usr/local/bin/docker-compose 5、变更权限 chmod x /usr/local/bin/docker-compose 6、启动 docker…

像SpringBoot一样使用Flask - 3.蓝图路由Blueprint

接上一篇文章《像SpringBoot一样使用Flask - 2.静态资源访问及模版》,我们看到测试的"controller"都写在了一起🤔 如何像Springboot一样划分出一个完整的controller,里面实现不同业务的包呢? 本篇引入Blueprint&#xf…

深入解析Condition的底层实现原理

一、原理概述 在AQS中,存在两个FIFO队列:同步队列和等待队列。等待队列是由Condition内部实现的,是一个虚拟的FIFO单向队列。 释义: AQS中tali和head主要构成了一个FIFO双向的同步队列,AQS中Condition构成了一个FIFO…

腾讯云轻量应用服务器地域如何选择?

腾讯云轻量应用服务器地域如何选择?地域就近选择,北方选北京地域、南方选广州地域,华东地区选上海地域。广州上海北京地域有什么区别?哪个好?区别就是城市地理位置不同,其他的差不多,不区分好坏…

gif动图怎么从视频中提取?一个方法操作简单

我们在日常上网时,会看到各种各样的gif动态图片。很多都是由当下大火的电影、电视剧中的画面制作的,这些gif动图非常的生动形象。相比视频、电影,gif动图的文件体积要小很多,方便传播。那么,如何从视频中提取gif动画呢…

短视频解析接口分发系统,附带系统搭建教程

搭建教程 宝塔面板:Nginx系统 php7.2 Mysql 5.6-5.7 伪静态Thinkphp 上传文件直接访问域名安装即可 解析接口推荐:ce.qsy.mobi 源码免费下载地址抄笔记

brew安装node和nvm切换和管理node版本

Homebrew是一款Mac OS平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能。简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径的情况,十分方便快捷。简单来说,Homebrew提供 App…

OPC UA 服务器的Web访问

基于Web 的应用非常普及,例如基于web 的SCADA ,物联网 Dashboard 等等,那么基于Web 的应用如何访问OPC UA 服务器呢?本博文讨论这方面的问题。 Web 的通信方式 Web 是我们通常讲的网站,它由浏览器,HTTP 服…

什么是工业数采网关?如何远程数采?

随着工业自动化的不断发展,数据采集与远程控制成为了生产过程中不可或缺的一环。而工业数采网关,作为连接工业设备与上位管理系统之间的桥梁,扮演着越来越重要的角色。HiWoo Box 作为一款优秀的工业数采网关产品,为 PLC、传感器、…

luatos框架中LVGL如何使用中文字体〈二〉编写脚本设置中文字体

本节内容,将和大家一同学习,在luatos环境中,使用lvgl库,一步步的编译固件、编写脚本,最终实现中文字体的显示。 芯片:AIR101 LCD屏:ST7789 上一节,我们一同学习了,硬件引…