List,Map,Set三个接口存取元素时,各有啥特点?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了List,Map,Set三个接口存取元素时,各有啥特点?相关的知识,希望对你有一定的参考价值。

    List特点:元素有放入顺序,元素可重复 Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的) 。

    Map特点:元素按键值对存储,无放入顺序 (应该知道什么是键值对吧!)List接口有三个实现类:LinkedList,ArrayList,Vector LinkedList:底层基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时还存储下一个元素的地址。

    链表增删快,查找慢 ArrayList和Vector的区别:ArrayList是非线程安全的,效率高;Vector是基于线程安全的,效率低 Set接口有两个实现类:HashSet(底层由HashMap实现),LinkedHashSet SortedSet接口有一个实现类:TreeSet(底层由平衡二叉树实现) Query接口有一个实现类:LinkList Map接口有三个实现类:HashMap,HashTable,LinkeHashMap   HashMap非线程安全,高效,支持null;HashTable线程安全,低效,不支持null SortedMap有一个实现类:TreeMap 其实最主要的是,list是用来处理序列的,而set是用来处理集的。Map是知道的,存储的是键值对 set 一般无序不重复.map kv 结构 list 有序。

3.首先list,set的上层接口是Collection接口。list底层存储数据是通过数组储存。    他有实现类ArrayList和LinkedList比较常用。Vector这个类现在基本没用。Vector和ArrayList是数组,插入数据较慢,查询较快。区别在Vector是线程安全的,所以处理速度不如ArrayList。linkedList是链表结构储存,插入数据较快,查询较慢。

4.Set集合最大特点不存重复元素,Set集合有自己的排序方式,所以取出时顺序和存储时不一样。常用实现类HashSetHashSet储存会判断值的Hash值,相同的话则不储存。Map接口是一个键值对集合,键不可以重复,值无所谓。Map集合也是有自己的排序方式常用实现类HashMap.实际Map集合存的就是映射。

参考技术A (一)List
1、可以允许重复的对象。
2、可以插入多个null元素。
3、是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序。
4、常用的实现类有 ArrayList、LinkedList

Vector。ArrayList
最为流行,它提供了使用索引的随意访问,而
LinkedList
则对于经常需要从
List
中添加或删除元素的场合更为合适。
(二)Set
1、不允许重复对象。
2、无序容器,你无法保证每个元素的存储顺序,TreeSet通过
Comparator
或者
Comparable。
3、只允许一个
null
元素。
4、Set
接口最流行的几个实现类是
HashSet、LinkedHashSet
以及
TreeSet。最流行的是基于
HashMap
实现的
HashSet。
(三)map
1、Map不是collection的子接口或者实现类。Map是一个接口。
2、Map

每个
Entry
都持有两个对象,也就是一个键一个值,Map
可能会持有相同的值对象但键对象必须是唯一的。
3.、TreeMap
也通过
Comparator
或者
Comparable
维护了一个排序顺序。
4.、Map
里你可以拥有随意个
null
值但最多只能有一个
null
键。
5、Map
接口最流行的几个实现类是
HashMap、LinkedHashMap、Hashtable

TreeMap。(HashMap、TreeMap最常用)。
扩展资料
list和set、map之间的转化方式:
1、list转成set集合
Set<Student>
studentSet=studentList.stream().map(Student::getId).collect(Collectors.toSet());
2、list转成map
Map<String,Student>
studentMap=studentList.stream().collect(Collectors.toMap(Student::getId,a
->
a,(k1,k2)->k1));
3、list转成map并且根据student中的name进行分组
Map<String,List<Student>>
group=studentList.stream().collect(Collectors.groupingBy(Student::getName));
参考资料:百度百科-java集合
参考技术B 主要考两个方面的水平:一是要真正明白这些内容,二是要有较强的总结和表述能力。如果你明白,但表述不清楚,在别人那里则等同于不明白。
首先,list与set具有相似性,它们都是单列元素的集合,所以,它们有一个功共同的父接口,叫collection。set里面不允许有重复的元素,所谓重复,即不能有两个相等(注意,不是仅仅是相同)的对象
,即假设set集合中有了一个a对象,现在我要向set集合再存入一个b对象,但b对象与a对象equals相等,则b对象存储不进去,所以,set集合的add方法有一个boolean的返回值,当集合中没有某个元素,此时add方法可成功加入该元素时,则返回true,当集合含有与某个元素equals相等的元素时,此时add方法无法加入该元素,返回结果为false。set取元素时,没法说取第几个,只能以iterator接口取得所有的元素,再逐一遍历各个元素。
list表示有先后顺序的集合,
注意,不是那种按年龄、按大小、按价格之类的排序。当我们多次调用add(obj
e)方法时,每次加入的对象就像火车站买票有排队顺序一样,按先来后到的顺序排序。有时候,也可以插队,即调用add(int
index,obj
e)方法,就可以指定当前对象在集合中的存放位置。一个对象可以被反复存储进list中,每调用一次add方法,这个对象就被插入进集合中一次,其实,并不是把这个对象本身存储进了集合中,而是在集合中用一个索引变量指向这个对象,当这个对象被add多次时,即相当于集合中有多个索引指向了这个对象,如图x所示。list除了可以以iterator接口取得所有的元素,再逐一遍历各个元素之外,还可以调用get(index
i)来明确说明取第几个。
map与list和set不同,它是双列的集合,其中有put方法,定义如下:put(obj
key,obj
value),每次存储时,要存储一对key/value,不能存储重复的key,这个重复的规则也是按equals比较相等。取则可以根据key获得相应的value,即get(object
key)返回值为key
所对应的value。另外,也可以获得所有的key的结合,还可以获得所有的value的结合,还可以获得key和value组合成的map.entry对象的集合。
list
以特定次序来持有元素,可有重复元素。set
无法拥有重复元素,内部排序。map
保存key-value值,value可多值。

以上是关于List,Map,Set三个接口存取元素时,各有啥特点?的主要内容,如果未能解决你的问题,请参考以下文章

List,Map,Set三个接口存取元素时,各有啥特点

ListMapSet 三个接口,存取元素时,各有什么特点?

list,map,set三个接口存储元素时各有啥特点

数组,list,map,set各有啥优缺点;

ListMapSet三个接口,存取元素时,各有什么特点?

ListMapSet三个接口,存取元素时,各有什么特点?