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

作者&投稿:明凭 (若有异议请与网页底部的电邮联系)
~ 集合类型主要有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/...


我爱你的各种语言谁知道啊?
朝鲜:???p(因为韩国文字不能显示所以看不到)爪哇语:akuptresnopmarangpsliromup 老挝:Khoiphukpchaup 马来语:sayapCintapMup 马来西亚:SayapCintamup 蒙古语:bipchamdphair 尼泊尔:Maptumilaipmayapgarchu,Maptimilaipmanpparauchup 波斯语:Torapdostpdaramp 他加禄语:Mahalpkitap 南非语:E...

TS\/16949审核表中 ET ,PT,SOP表示什么意思
1、ET阶段(Engineering Trial,工程调试——设计验证阶段):在车型开发初期,有设计公司对白车身的精度以及各个空位的精度进行验证和修正的阶段。典型要求:模具标准化,工艺标准化,零部件与整车结构标准化,品质判定标准化。2、PT阶段(Production Trial,生产调试——生产验证阶段):在通过了设计公司的设...

“超能力材质”碳化硅首次应用 解析蔚来ET7电驱系统
首发应用在ET7上的蔚来二代电驱系统最主要是实现了碳化硅的量产,它将于2022年一季度开始交付,蔚来实现这一目标也在行业前三的序列。从碳化硅的技术特性看确实有效提升了电驱系统的各项指标,以保证蔚来的最新三电系统仍保持较强的技术竞争实力。而碳化硅本身不论从原材料角度还是核心技术研发角度都存在着...

魔兽争霸中的英语
..HTGlaive Thrower\/飞刃投掷车(原名:Ballista\/弩车)...弩炮,攻城车...GT\/CAT Dryad\/林中仙子...树妖,小鹿,小6...DYDruid of the Claw\/兽爪德路依...熊德,大熊...DOC,BEAR Hippogryph\/角鹰兽...鹫马...

Tik-L是什么意思
近义词联想:由medium(中 (地)图map[mp]等的)联想middle[midl] 团体(组)group[ɡru:p](中间的)。汤(羹)soup[su:p]同音词联想:由Jim(吉姆) 野营camp[kmp]gym联想[im](体育馆)。 帮助help[help]10.n和ne都读[n] 便宜的cheap[i:p]学会learn[l:n] 停止stop[stp]轮流(转弯)turn[t:n] 12.se和...

怎么把数据库查询的结果保存到map中
1、首先初始化一个map,然后按照代码依次打印Map的数据。2、执行结果如下,可见打印结果并不是按插入顺序打印的。3、将代码修改为LinkedHashMap,遍历LinkedHashMap。4、打印结果为按Map插入顺序打印,可见LinkedHashMap中的数据是有序的,排序方式按照插入顺序。5、最后将代码修改为new TreeMap,然后遍历...

用二十一种语言说生日快乐
波斯语 Tavalodet Mobarak!芬兰语 Hyvaa syntymapaivaa!加拿大法语 Bonne Fete!法语 Joyeux Anniversaire!苏格兰盖尔语 Co` latha breith sona dhuibh!加利西亚人语 Ledicia no teu cumpreanos!格鲁吉亚语 Gilotcav dabadebis dges!德语-巴伐利亚 Ois Guade zu Deim Geburdstog!德语 Alles Gute zum ...

请问文件格式有哪几种?
MAP 映射文件;Duke Nukem 3D WAD游戏文件 M MAQ Microsoft Access查询文件 Z>uK: MAR Microsoft Access报表文件 JIH3 MAS Lotus Freelance Graphics Smart Master文件 p!] MAT Microsoft Access表;3D Studio MAX材料库 z1 MAUD MAUD抽样格式 [}8 MAX Kinetx的3DStudio MAX文件;该格式用于一个3D场景文件;...

生日快乐用其他的语言怎么说?
Farsi Tavalodet Mobarak!Finnish Hyvaa syntymapaivaa!French (Canada) Bonne Fete!French Joyeux Anniversaire!Frisian Lokkiche jierdei!Gaelic (Irish) L?breithe mhaith agat!Gaelic (Scottish) Co` latha breith sona dhuibh!Galician (Spain) Ledicia no teu cumpreanos!Georgian Gilotcav dab...

αge的音标是什么?
象棋chess[tes] 取get[ɡet]猜guess[ɡes] 秘密secret[si:krit]商业,事务business 让let[let][biznis] 8.even读[i:vn]词义联想:由dress(衣服)联 晚上evening[i:vni]想clothes[kluz](衣服);更even[i:vn]再联想uniform[ju:nif:m] 加字母联想:由even(更)(制服)再联想pants 联想event[ivent](比赛项[...

西秀区15065072982: java中list和map的区别 -
祝放复方: 1、Java中的集合包括三大类,它们是Set、List和Map,它们都处于java.util包中,Set、List和Map都是接口,它们有各自的实现类.Set的实现类主要有HashSet和TreeSet,List的实现类主要有ArrayList,Map的实现类主要有HashMap和TreeMap. ...

西秀区15065072982: 集合类List/Set/Map.的区别和联系 -
祝放复方: 首先list与set都继承于Collection,list序列的形式存储元素.所以取出来的顺序可能和放入顺序不同.set的特点是无法存放重复的元素.map一个映射不能包含重复的键;每个键最多只能映射一个值.以键值对存放数据以上三个都是接口且不能被实例化.

西秀区15065072982: Java中Set、List、Map集合类(接口)的特点及区别.分别有哪些常用实现类. -
祝放复方: list与Set、Map区别及适用场景1、List,Set都是继承自Collection接口,Map则不是2、List特点:元素有放入顺序,元素可重复 ,Set特点:元素无放入顺序,元素不可重复,重复元素会覆盖掉,(注意:元素虽然无放入顺序,但是元素在set中的...

西秀区15065072982: JAVA的集合类型有哪些 -
祝放复方: 集合类型主要有3种:set(集)、list(列表)和map(映射). 1、List(有序、可重复) List里存放的对象是有序的,同时也是可以重复的,List关注的是索引,拥有一系列和索引相关的方法,查询速度快.因为往list集合里插入或删除数据时,...

西秀区15065072982: Java集合类List/Set/Map的区别和联系 -
祝放复方: 常用的集合类有一下几种: List结构的集合类:ArrayList类,LinkedList类,Vector类,Stack类 Map结构的集合类:HashMap类,Hashtable类 Set结构的集合类:HashSet类,TreeSet类 Queue结构的集合:Queue接口 HashMap和Hashtable的区...

西秀区15065072982: java中list,set和map 的区别 -
祝放复方: Set,List,Map的区别 java集合的主要分为三种类型:Set(集) List(列表) Map(映射) 要深入理解集合首先要了解下我们熟悉的数组:数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),而JAVA集合可以存...

西秀区15065072982: List,Set,Map 的区别是什么? -
祝放复方: List 以特定次序来持有元素,可有重复元素.Set 无法拥有重复元素,内部排序.Map 保存key-value值,value可多值. List接口对Collection进行了简单的扩充,它的具体实现类常用的有ArrayList和LinkedList.你可以将任何东西放到一个List容...

西秀区15065072982: Collections,Collection ,Map,List,Set的区别? -
祝放复方: Collections是集合的工具类,含有各种有关集合操作的静态方法.Collection是个集合超级接口,其中List,set都是Collection的子接口.List 集合 List 元素有先后次序的集合, 元素有index位置, 元素可以重复, List继承与Collection接口, 实现类...

西秀区15065072982: map,list,set是干嘛用的,何时才会用到哪一种,有什么区别啊? -
祝放复方: 其实实际开发中 就list和map用的多点 list嘛 比如你从数据库里读了很多条记录 经过处理封装成对象 就可以装在一个该对象类型的list里面 就可以迭代访问里面每个对象,里面的对象是有顺序的,只有索引,你不能通过对他们取别的名字之类的得到她 ; map呢 是key-value组成的键值对;value可以是任意object;key是一个String;你可以通过key访问value;比如在servlet技术中 放在request里的东西 response 里的东西这些都是map;还有比如解析xml的时候 你读到的东西 也可以用map来保存

西秀区15065072982: list,map,set三个接口,存取元素时,各有什么特点 -
祝放复方: list:元素有序,可按索引存取,代表ArrayList; set:元素按hash排列,可用迭代器遍历,元素不重复; map:key=>value结构字典;

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网