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.mzph.cn/bicheng/41292.shtml

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

相关文章

SpringBoot整合Dubbo的快速使用教程

目录 一、什么是Dubbo? 二、SpringBoot整合Dubbo 1、父工程引入依赖 2、各个Dubbo服务子模块引入依赖 3、服务提供者 (1)启动类添加注解EnableDubbo (2)服务类添加注解DubboService (3)配置文件…

Patch SCN使用说明---惜分飞

软件说明 该软件是惜分飞(https://www.xifenfei.com)开发,仅用来查看和修改Oracle数据库SCN(System Change Number),主要使用在数据库因为某种原因导致无法正常启动的情况下使用该工具进行解决.特别是Oracle新版本中使用隐含参数,event,orad…

Java核心 - 泛型详解

文章目录 一、概述1、什么是泛型2、用泛型最直接的优点3、分类 二、泛型详解1、泛型类(1)概述(2)代码实例 2、泛型派生类(1)概述(2)代码实例(3)扩展&#xff…

jupyter在运行问题处理ModuleNotFoundError: No module named ‘jupyter_server‘

背景: 有段时间没有使用了jupyter了,现在需要使用它数据可视化的功能进行学习一个新的python库。创建ipynb文件后运行出现报错。 问题处理 异常报错:ModuleNotFoundError: No module named ‘jupyter_server’ 没有jupyter_server&#x…

Python文字数字转换利器: word2number库详解

Python文字数字转换利器: word2number库详解 1. word2number简介2. 安装3. 基本使用3.1 基本数字转换3.2 序数转换3.3 小数转换3.4 负数转换 4. 高级用法4.1 处理混合表达4.2 处理大写字母 5. 错误处理6. 实际应用示例6.1 文本数据预处理6.2 简单计算器 7. 局限性8. 总结 在处理…

10元 DIY 一个柔性灯丝氛围灯

之前TikTok上特别火的线性氛围灯Augelight刚出来的时候一度卖到80多美金,国内1688也能到400多人民币。 随着各路国内厂商和DIY创客的跟进,功能变多的同时价格一路下滑,虽然有的质感的确感人,但是便宜啊。 甚至关注的up有把成本搞到…

【24年一博研讨会总结】BJ0705

1.工艺边据PCB边缘 >5mm. 2.IPC-A-600G Pitch < 1.25mm H<0.025mm,小于0.4mm,取消丝印框&#xff0c;防止锡膏不匀虚焊&#xff1b; 3.表面镀金与镍厚度 金厚度 um镍厚度 um0.0192.7830.0213.3610.0453.6640.0314.378 4.多层板&#xff0c;层间距>20mil 可以认…

clsx源码阅读分析

clsx源码 版本 2.1.1 一个处理类名的函数。 地址&#xff1a;https://github.com/lukeed/clsx/blob/master/src/index.js 源码文件index.js 文件 src/index.js //src/index.js function toVal(mix) {var k,y,str "";// 判断参数min类型&#xff0c; 字符串或数…

C++中的左值、右值介绍

C中的左值、右值介绍 在C中&#xff0c;左值&#xff08;lvalue&#xff09;和右值&#xff08;rvalue&#xff09;是非常重要的概念&#xff0c;尤其是在C11及以后的版本中引入的右值引用&#xff08;rvalue reference&#xff09;和移动语义&#xff08;Move Semantics&#…

Ubuntu系统复制文件到共享文件夹出错

1、问题描述 Ubuntu系统复制文件到共享文件夹时&#xff0c;出现拼接文件时出错&#xff1a;输入/输出错误。 使用cp命令&#xff1a; cp -Rf XXX YYY 也是出错&#xff1a; cp: 写入 xxx 出错: 输入/输出错误 2、查看磁盘空间 查看磁盘空间&#xff0c;显示空间还有剩余…

安乃达:看不懂的募资

不好玩啊&#xff0c;高标接连被S&#xff0c;市场激进资金找到了新股作为抱团方向。 首日大涨超100%&#xff0c;两日涨幅133%&#xff0c;今天果不其然被电风扇刮走了&#xff0c;今天我们聊聊新加入A股大本营的公司——安乃达。 首先&#xff0c;安乃达是国内直驱轮毂电机头…

Golang栈空间管理

分段栈 在Go1.3之前&#xff0c;所有goroutine在初始化时都会分配一块固定大小的内存空间。 在固定8KB或者满足其他条件下&#xff0c;会在全局的栈缓存链表中找到空闲的内存块作为新goroutine的栈空间返回其余情况&#xff0c;会在堆上申请一块合适的内存 所有栈空间会以链…

hot100 | 六、矩阵

1-leetcode73. 矩阵置零 注意&#xff1a; 注意第一行和第一列如果检查到了0&#xff0c;直接break也可以使用HashSet方法&#xff0c;直接把0的数字对应的横纵坐标放在两个不同的HashSet当中&#xff0c;最后如果HashSet中Contain了当前数字下标中的一个&#xff0c;就直接给…

Amazon SQS应用场景及Python实现案例

1. SQS简介 Amazon Simple Queue Service (SQS) 是一种完全托管的消息队列服务,可以帮助解耦和扩展微服务、分布式系统和无服务器应用程序。SQS 可以在分布式应用程序组件之间传输任何数量的消息,而无需丢失消息或要求其他服务始终可用。 2. SQS应用场景 SQS 在许多场景中…

零基础学python(一)

1. 匿名函数 常规函数&#xff1a; def fun(x, y):return x y 匿名函数&#xff1a; # lambda 空格后面是函数入参&#xff0c;冒号后面写函数体/函数逻辑 a lambda x,y: x y print(a(2,3)) 匿名函数/lambda函数的最大优点就是快速定义函数&#xff0c;使代码更精简。 …

Redis 的缓存淘汰策略

Redis 作为一个高性能的内存数据库&#xff0c;提供了多种缓存淘汰策略&#xff08;也称为过期策略或驱逐策略&#xff09;&#xff0c;用于管理内存使用。当 Redis 达到其内存限制时&#xff0c;系统会根据配置的策略删除一些数据&#xff0c;以释放内存空间。以下是 Redis 支…

【数据结构】(6.3)堆的应用——堆排序(C语言)

系列文章目录 文章目录 系列文章目录前言1. 堆排序的基础知识2. 堆排序详解2.1 堆排序整体思路2.2 思路详解2.2.1 建堆2.2.2 堆排序完整代码2.2.3 输出数据 3. 时间复杂度分析 前言 1. 堆排序的基础知识 堆排序&#xff08;Heap Sort&#xff09;就是对直接选择排序的一种改进…

04通俗理解自注意力机制(self-attention)

04浅谈自注意力机制&#xff08;self-attention&#xff09; 1. 基本概念 注意力机制 是Transformer模型的核心。它的作用是让模型能够“关注”输入数据的不同部分&#xff0c;而不是一次只处理一个词。比如&#xff0c;当模型在处理一句话时&#xff0c;它可以同时考虑句子中…

2024攻防演练:亚信安全新一代WAF,关键时刻守护先锋

实网攻防 网络安全如同一面坚固的盾牌&#xff0c;保护着我们的信息资产免受无孔不入的威胁。而其中&#xff0c;WAF就像网络安全的守门员&#xff0c;关键时刻挺身而出&#xff0c;为您的企业筑起一道坚实的防线。 攻防不对等 防守方实时应答压力山大 在攻防对抗中&#xf…

day04-matplotlib入门

matplotlib Matplotlib 提供了一个套面向绘图对象编程的 API接口 是一款用于数据可视化的 Python 软件包&#xff0c;支持跨平台运行 它能够根据 NumPyndarray 数组来绘制 2D(3D) 图像&#xff0c;它使用简单、代码清晰易懂&#xff0c;深受广大技术爱好 者喜爱。 实列&…