问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Set、Map、List三种集合的差别你还傻傻分不清吗?

发布网友 发布时间:2024-09-08 17:09

我来回答

1个回答

热心网友 时间:2024-10-15 05:09

集合类型主要有3种:set(集)、list(列表)和map(映射)。

Set接口是Collection接口的一个子接口,它是无序的,set中不包含重复的元素,也就是说set中不存在两个这样的元素a1.equals(a2)结果为true。由于Set接口提供的数据结构是数学意义上的集合概念的抽象,因此它支持对象的添加和删除。

Set的接口继承Collection接口,而且不允许集合中存在重复项。

TreeSet在集中以升序对对象排序的实现,这意味着从一个TreeSet对象获得第一个迭代器将按照升序来提供对象,TreeSet类使用了一个TreeMap。

下面来看一个例子,当需要从一个Set集合中以有序的方式抽取元素时,TreeSet实现会有用处,为了能顺利进行,添加到TreeSet的元素必须是可排序的。

可以看到上面的输出是无序的,且没有重复,下面的输出就是按照首字母的顺序进行排序。

List接口继承了Collection接口以定义一个允许重复项的有序集合。

一般有2种List,一种是基本的ArrayList,其优点在于随机访问元素,另一种是更强大的LinkedList,它并不是为了快速随机访问而设计的,而是具有一套更通用的方法。

List最重要的特点就是:它保证维护元素特定的顺序,List为Collection添加了很多方法,使得能够向List中间插入语移除元素。

ArrayList由数组实现的List,允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢。

LinkedList对顺序访问进行了优化,向List中间插入与删除的开销并不大,随机访问则行对较慢,(使用ArrayList代替)还有下列方法:addFirst(),addLast(),getFirst(),getLast(),removeFirst(),romoveLast().这些方法使得LinkedList可以当作堆栈,队列和双向队列使用。

List的一些API的使用:

List的常用算法举例

Set和List的对比:

Set:检查元素效率低下,删除和插入的效率高,插入和删除不会引起元素的位置变化。

List:和数组类似,List可以动态增长,查找元素的效率较高,插入元素和删除元素效率低,因为会引起其他元素位置发生变化。

Set和List的具体子类:

Set

List:

Map接口不是Collection接口的继承,而是从自己的用于维护键值对关联的接口层次结构入手,按定义,该接口描述了从不重复的键到值的映射。

一般可以分为三组操作:改变,查询和提供可选视图

Map.Entry接口

Map的entrySet()方法返回一个实现Map.Entry接口的对象集合。集合中每个对象都是底层Map中一个特定的键-值对。

通过这个集合迭代,您可以获得每一条目的键或值并对值进行更改。但是,如果底层Map在Map.Entry接口的setValue()方法外部被修改,此条目集就会变得无效,并导致迭代器行为未定义。

HashMap:实现一个映象,允许存储空对象,而且允许键是空(由于键必须是唯一的,当然只能有一个)。

映射的使用示例:

以下程序演示了具体Map类的使用。该程序对自命令行传递的词进行频率计数。HashMap起初用于数据存储。后来,映射被转换为TreeMap以显示有序的键列列表。

结果:

1、什么是Iterator

一些集合类提供了内容遍历的功能,通过java.util.Iterator接口。这些接口允许遍历对象的集合。依次操作每个元素对象。当使用 Iterators时,在获得Iterator的时候包含一个集合快照。通常在遍历一个Iterator的时候不建议修改集合本省。

2、Iterator与ListIterator有什么区别?

Iterator:只能正向遍历集合,适用于获取移除元素。ListIterator:继承Iterator,可以双向列表的遍历,同样支持元素的修改。

3、什么是HaspMap和Map?

Map是接口,Java 集合框架中一部分,用于存储键值对,HashMap是用哈希算法实现Map的类。

4、HashMap与HashTable有什么区别?对比Hashtable VS HashMap

两者都是用key-value方式获取数据。Hashtable是原始集合类之一(也称作遗留类)。HashMap作为新集合框架的一部分在Java2的1.2版本中加入。它们之间有一下区别:

5、在Hashtable上下文中同步是什么意思?

同步意味着在一个时间点只能有一个线程可以修改哈希表,任何线程在执行hashtable的更新操作前需要获取对象锁,其他线程等待锁的释放。

6、什么叫做快速失败特性

从高级别层次来说快速失败是一个系统或软件对于其故障做出的响应。一个快速失败系统设计用来即时报告可能会导致失败的任何故障情况,它通常用来停止正常的操作而不是尝试继续做可能有缺陷的工作。当有问题发生时,快速失败系统即时可见地发错错误告警。在Java中,快速失败与iterators有关。如果一个iterator在集合对象上创建了,其它线程欲“结构化”的修改该集合对象,并发修改异常 (ConcurrentModificationException) 抛出。

7、怎样使Hashmap同步?

HashMap可以通过Map m = Collections.synchronizedMap(hashMap)来达到同步的效果。

8、什么时候使用Hashtable,什么时候使用HashMap

基本的不同点是Hashtable同步HashMap不是的,所以无论什么时候有多个线程访问相同实例的可能时,就应该使用Hashtable,反之使用HashMap。非线程安全的数据结构能带来更好的性能。

如果在将来有一种可能—你需要按顺序获得键值对的方案时,HashMap是一个很好的选择,因为有HashMap的一个子类 LinkedHashMap。所以如果你想可预测的按顺序迭代(默认按插入的顺序),你可以很方便用LinkedHashMap替换HashMap。反观要是使用的Hashtable就没那么简单了。同时如果有多个线程访问HashMap,Collections.synchronizedMap()可以代替,总的来说HashMap更灵活。

最后,感谢大家看到最后,如文章有不足,欢迎大家在评论区支持,给予意见。如果觉得我的文章对你有帮助,那就给我一个赞同吧。

每天都会分享java相关技术文章或行业资讯。欢迎大家关注和转发文章。

原文地址: blog.csdn.net/lmarster/...
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
手机扬声器清理 手机扬声器如何清理 电脑电源12v电压低故障维修 华为手机怎么开启健康运动授权功能 win10怎么修复IE win10自带浏览器打不开怎么办 win10自带浏览器打不开解决办法介绍_百度... 一般电塔上有14根线的是多少伏? 请问这个电塔上是多少伏特的高压线,是不是1000kv的。 只有一台变压器高压如何设计 怎么改手机号? 糖尿病餐后2小时血糖的正常值范围是多少 为什么我的商家小程序搜索不到? kj和kcal的换算器 请问热量单位千焦(KJ)跟卡路里怎么换算 kj和kcal换算计算器 在秦皇岛浅水湾浴场玩两天一夜,应该怎么安排路线? 北戴河最浅的海滩 2023年10月1日法定假日几天 乌尔禾魔鬼城在哪里 新疆乌尔禾魔鬼城景点介绍 三国杀集智技能是什么 李宁服装怎么样 皮肤受冷 或温差大的时候 尤其是下雨天 发痒 发红一抓就肿了 就去年... 秋季多雨,皮肤一碰到下雨天就非常的痒,而且还会长出很多的小红点,为什... 一到下雨天皮肤就痒怎么回事 电脑高手帮忙:谁能提供一些在电脑的开始里运行cmd输入的命令语言... 坐地铁步骤 南京农业大学计算机在哪个校区 经济生活文摘范例参考 农业技术经济论文范例 中国地质大学学报中国地质大学学报论文范例 男友按摩微信 正常吗?我该怎么办? 昆明长水机场附近哪里可以停车 怎么区分非国标油和国标油 非标油和国标油的区别 高中数学六种概率模型公式 乙苯国家标准 brics是指什么? 一年级的女娃身高多少是算正常的? 大浪绿道能到大顶山吗,松江田园旅游攻略 珠海市斗门区新冠疫苗接种点及预约咨询电话 巴戟和熟地炖汤配什么好 项目介绍-哥大数据科学-哥大DS这么高的录取水平,要说水,水份从哪来的... 我现在高三 去新家坡留学要怎么样才能去 一年大概需要多少钱 在哪里... 长焦镜头适合拍什么 长焦镜头介绍 长焦镜头表现纵深透视非常好 使用长焦镜头拍摄旅游照片的技巧有哪些? 盘锦大米和普通大米的营养价值有哪些区别? 轻的abb词语有哪些. 轻()() ABB形的 金龙舒胆颗粒用法 金龙舒胆颗粒有什么注意事项