Java 容器

Java容器都有哪些?

Java容器分为Collection和Map两大类,其下又有很多子类,如下所示Collection:
List:ArrayList、LinkedList、Vector、Stack
Set:HashSet、LinkedHashSet、TreeSet
Map:HashMap、LinkedHashMap、TreeMap、ConcurrentHashMap、Hashtable

List、 Set、 Map之间的区别是什么?

List、 Set、 Map的区别主要体现在两个方面:元素是否有序、是否允许元素重复

HashMap、 Hashtable区别

不同点:
(1) 父类不同:HashMap继承了AbstractMap,HashTable继承Dictionary抽象类,两者均实现Map接口;
(2) Hashtable不允许null值(包括键或值),HashMap允许一个空键 (其他的空键会覆盖第一个空键) 和任意数量的空值
(3) Hashtable的方法是同步的,HashMap的方法不是同步的。这是两者最主要的区别;所以就意味着Hashtable是线程安全的,Hashtable效率较低;HashMap不是线程安全的,HashMap效率较高;
如果对同步性或与遗留代码的兼容性没有任何要求,建议使用HashMap。 查看Hashtable的源代码就可以发现,除构造函数外,Hashtable的所有public方法声明中都有synchronized关键字,而HashMap的源码中则没有。
(4)HashMap去掉了HashTable的contains方法,但是加上了containsValue和containskey0方
法;
相同点:
(1)为了成功的在HashMap和Hashtable中存储和获取对象,用作key的对象必须实现hashCode()方法和equals(方法
(2) HashMap和HashTable的数据元素是无序的
(3) HashMap和Hashtable的底层实现都是数组+链表结构实现
HashMap是非线程安全的,HashTable是线程安全的
HashMap的键和值都允许有null值存在,而HashTable则不行。
因为线程安全的问题,HashMap效率比HashTable的要高。
Hashtable是同步的,而HashMap不是。因此, HashMap更适合于单线程环境,而Hashtable适合于多线程环境
一般现在不建议用HashTable
总结:
是HashTable是遗留类,内部实现很多没优化和冗余。
即使在多线程环境下,现在也有同步的ConcurrentHashMap替代,没有必要因为是多线程而用
HashTable.

LinkedHashMap是什么? 怎么实现的?

LinkedHashMap 继承自 HashMap所以它的底层仍然是基于拉链式散列结构即由数组和链表或
红黑树组成。另外,LinkedHashMap 在上面结构的基础上,将节点额外链接成了一条双向链表使得上面的结构可以保持键值对的插入顺序。同时通过对链表进行相应的操作,实现了访问顺序柜关逻辑。

如何决定使用HashMap还是TreeMap?

对于在Map中插入、 删除、 定位一个元素这类操作, HashMap是最好的选择,因为相对而言
HashMap的插入会更快,但如果你要对一个key集合进行有序的遍历,那TreeMap是更好的选
择。

说一下HashMap的实现原理?

HashMap基于Hash算法实现的,我们通过put(key,value)存储,get(key)来获取。当传入key时,HashMap会根据key.hashcodeO计算出hash值,根据hash值将value保存在bucket
里。当计算出的hash值相同时,我们称之为hash冲突,HashMap的做法是用链表和红黑树存储相同hash值的value。 当hash冲突的个数比较少时,使用链表否则使用红黑树。

说一下HashSet的实现原理?

HashSet是基于HashMap实现的, HashSet底层使用HashMap来保存所有元素,因此HashSet的实现比较简单, 相关HashSet的操作,基本上都是直接调用底层HashMap的相关方法来完成
HashSet不允许重复的值。
ArrayList和LinkedList的区别是什么?
数据结构实现: ArrayList是动态数组的数据结构实现,而LinkedList是双向链表的数据结构实
现。
随机访问效率:ArrayList比LinkedList在随机访问的时候效率要高,因为LinkedList是线性的数据存储方式,所以需要移动指针从前往后依次查找。
增加和删除效率:在非首尾的增加和删除操作,LinkedList要比ArrayList效率要高,因为
ArrayList增删操作要影响数组内的其他数据的下标
综合来说,在需要频繁读取集合中的元素时,更推荐使用ArrayList, 而在插入和删除操作较多时,更推荐使用LinkedList
如何实现数组和List之间的转换?
数组转List: 使用Arrays.asList(array)进行转换。
List转数组:使用List自带的toArray()方法。

ArrayList和Vector 的区别是什么?

线程安全:Vector使用了Synchronized来实现线程同步,是线程安全的,而ArrayList是非线程安全的。
性能:ArrayList在性能方面要优于Vector
扩容:ArrayList和Vector都会根据实际的需要动态的调整容量,只不过在Vector扩容每次会增加1倍, ArrayList只会增加50%。

Array和ArrayList有何区别

Array可以存储基本数据类型和对象 ArrayList只能存储对象
Array是指定固定大小的,而ArrayList大小是自动扩展的
Array内置方法没有ArrayList多,比如addAl removeAlliteration等方法只有ArrayList有。

在Queue中poI和remove有什么区别?

相同点 都是返回第一个元素 并在队列中删除返回的对象
不同点:如果没有元素pol)会返回null remove)会直接抛出NoSuchElementExceptior异常。

哪些集合类是线程安全的?

Vector、 Hashtable、Stack都是线程安全的,而像HashMap则是非线程安全的,不过在DK1.5之后随着Javautilconcurrent并发包的出现,它们也有了自己对应的线程安全类,比如
HashMap对应的线程安全类就是ConcurrentHashMap。

送代器Iterator是什么?

Iterator接口提供遍历任何Collection的接口。我们可以从一个Collection中使用选代器方法来获取选代器实例。选代器取代了Java集合框架中的Enumeration,选代器允许调用者在选代过程中移除元素。
3Iterator怎么使用?有什么特点?
Iterator使用代码如下:
IteratorE的特点是更加安全,因为它可以确保,在当前遍历的集合元素被更改的时候,就会抛出ConcurrentModificationException 异常。

Iterator和Listiterator有什么区别

Iterator 可以遍历Set和List集合, ListIterator只能遍历List
Iterator只能单向遍历, ListIterator可以双向遍历 (向前/后遍历)
ListIterator从Iterator接口继承,然后添加了一些额外的功能,比如添加一个元素、替换一个元素、获取前面或后面元素的索引位置。

怎么确保一个集合不能被修改?

可以使用Collections.unmodifiablecollection(collectionc)方法来创建一个只读集合,这样改变集合的任何操作都会抛出Java.lang.UnsupportedoperationException 异常。

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

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

相关文章

LLM - 神经网络的训练过程

1. 对于回归问题,用损失函数来计算预测值和真实值的差异,一种常用的公式是如下图所示(Mean Square Error),如果损失函数的值越小说明神经网络学习越准确,所以神经网络训练目标是减小损失函数的值, 2. 对于分类问题&…

Https网站如何申请免费的SSL证书及操作使用指南

前言 在当今互联网环境下,HTTPS已成为网站安全的标配,它通过SSL/TLS协议为网站数据传输提供加密,保障用户信息的安全。申请并部署免费SSL证书,不仅能够提升网站的专业形象,还能增强用户信任。本文将详细介绍如何在知名…

Yolo系列——动态卷积

一、为什么要提出动态卷积? 为了更好的将模型部署在边端设备上,需要设计轻量级网络模型。轻量级卷积网络因其较低的运算而限制了CNN的深度(卷积层层数)和宽度(通道数),限制了模型的表达能力&am…

《昇思25天学习打卡营第10天|使用静态图加速》

文章目录 今日所学:一、背景介绍1. 动态图模式2. 静态图模式 三、静态图模式的使用场景四、静态图模式开启方式1. 基于装饰器的开启方式2. 基于context的开启方式 总结: 今日所学: 在上一集中,我学习了保存与加载的方法&#xff…

【全网最全ABC三题完整版】2024年APMCM第十四届亚太地区大学生数学建模竞赛(中文赛项)完整思路解析+代码+论文

我是Tina表姐,毕业于中国人民大学,对数学建模的热爱让我在这一领域深耕多年。我的建模思路已经帮助了百余位学习者和参赛者在数学建模的道路上取得了显著的进步和成就。现在,我将这份宝贵的经验和知识凝练成一份全面的解题思路与代码论文集合…

金属3D打印如何精准选材

随着3D打印技术的飞跃发展,模具制造领域迎来了前所未有的创新机遇。在众多3D打印技术中,SLM金属3D打印以其精度高、复杂结构成型能力,成为众多行业的优选。然而,金属打印材料,如何精准选择,以最大化满足项目…

MySQL的并发控制、事务、日志

目录 一.并发控制 1.锁机制 2.加锁与释放锁 二.事务(transactions) 1.事物的概念 2.ACID特性 3.事务隔离级别 三.日志 1.事务日志 2.错误日志 3.通用日志 4.慢查询日志 5.二进制日志 备份 一.并发控制 在 MySQL 中,并发控制是确…

Build a Large Language Model (From Scratch)附录B(gpt-4o翻译版)

来源:https://github.com/rasbt/LLMs-from-scratch?tabreadme-ov-file https://www.manning.com/books/build-a-large-language-model-from-scratch

模拟,CF 570C - Replacement

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 570C - Replacement 二、解题报告 1、思路分析 1、长为cnt的连续串的最小操作次数为cnt - 1 2、每次将一个非. 替换为. f要么增加1要么增加2 只有前后都是 . 的时候会增加2 同理,当我们将一…

【漏洞复现】飞企互联-FE企业运营管理平台——SQL注入

声明:本文档或演示材料仅供教育和教学目的使用,任何个人或组织使用本文档中的信息进行非法活动,均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 飞企互联-FE企业运营管理平台是一个基于云计算、智能化、大数据…

针对某客户报表系统数据库跑批慢进行性能分析及优化

某客户报表系统数据库跑批时间过长,超出源主库较多,故对其进行了分析调优,目前状态如下: 1、业务连接的rac的scanip,因为负载均衡将跑批的连接连接到了多个计算节点导致节点间通讯成本较高,故速率缓慢&…

2024年7月6日 十二生肖 今日运势

小运播报:2024年7月6日,星期六,农历六月初一 (甲辰年庚午月辛未日),法定节假日。 红榜生肖:猪、马、兔 需要注意:狗、鼠、牛 喜神方位:西南方 财神方位:正…

Android - 模拟器

Android SDK 包括一个在您的计算机上运行的虚拟移动设备模拟器。 该模拟器可让您在不使用物理设备的情况下对 Android 应用程序进行原型设计、开发和测试。 在本章中,我们将探索真实安卓设备中存在的模拟器中的不同功能。 创建 AVD 如果您想模拟真实设备&#xff0c…

机器人典型的交互任务、阻抗控制的示意图、内涵、意义、存在的交互控制科学问题

机器人典型的交互任务 机器人在实际应用中经常需要完成与环境的交互任务,这些任务包括但不限于: 装配任务:在制造业中,机器人需要准确地操控和组装各种零部件,包括不同形状、大小和材质的物体。搬运任务:…

docker-compose搭建prometheus、grafana

一、安装prometheus 1、安装 version: 3.1services:prometheus:image: prom/prometheus:v2.48.0container_name: prometheushostname: prometheusrestart: alwaysvolumes:- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml- ./prometheus/:/etc/prometheus/port…

strcpy,srtcmp,strlen函数漏洞利用

strcpy,srtcmp,strlen函数漏洞利用 strcpy strcpy函数用于将字符串复制到另一个指针指向的空间中,遇到空字符 **b’x\00’**时停止,: 所以可以利用 strcpy不检查缓冲区 的漏洞(构造的字符串要以\0结尾),…

Ubuntu / Debian安装FTP服务

本章教程,记录在Ubuntu中安装FTP服务的具体步骤。FTP默认端口:21 1、安装 pure-ftpd sudo apt-get install pure-ftpd2、修改默认配置 # 与 centos 不同,这里需要在 /etc/pure-ftpd/conf 文件夹下执行下列命令,增加对应配置文件: # 创建 /etc/pure-ftpd/conf/PureDB 文件…

半导体制造企业 文件共享存储应用

用户背景:半导体设备(上海)股份有限公司是一家以中国为基地、面向全球的微观加工高端设备公司,为集成电路和泛半导体行业提供具竞争力的高端设备和高质量的服务。 挑战:芯片的行业在国内迅猛发展,用户在上海…

3033.力扣每日一题7/5 Java

博客主页:音符犹如代码系列专栏:算法练习关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 目录 思路 解题方法 时间复杂度 空间复杂度 Code 思路 首先创建一个与…

Vue3从入门到精通(三)

vue3插槽Slots 在 Vue3 中&#xff0c;插槽&#xff08;Slots&#xff09;的使用方式与 Vue2 中基本相同&#xff0c;但有一些细微的差异。以下是在 Vue3 中使用插槽的示例&#xff1a; // ChildComponent.vue <template><div><h2>Child Component</h2&…