List与set集合,Map集合的区别以及它们的实现类有哪些?

List 是可重复集合,Set 是不可重复集合,这两个接口都实现了 Collection 父接口。算法

Map 未继承 Collection,而是独立的接口,Map 是一种把键对象和值对象进行映射的集合,它的每个元素都包含了一对键对象和值对象,Map 中存储的数据是没有顺序的, 其 key 是不能重复的,它的值是能够有重复的。数组

List 的实现类有 ArrayList,Vector 和 LinkedList等:安全

ArrayList 和 Vector 内部是线性动态数组结构,在查询效率上会高不少,ArrayList是非线程安全的,效率高;Vector是基于线程安全的,效率低。数据结构

LinkedList:是双向链表的数据结构存储数据,在作查询时会按照序号索引数据进行前向或后向遍历,查询效率偏低,但插入数据时只须要记录本项的先后项便可,因此插入速度较快。ide

Set 的实现类有 HashSet 和 TreeSet;线程

HashSet:内部是由哈希表(其实是一个 HashMap 实例)支持的。它不保证 set 元素的迭代顺序。指针

TreeSet:TreeSet 使用元素的天然顺序对元素进行排序,或者根据建立 set 时提供的 Comparator 进行排序。对象

Map 接口实现类:Hashtable,HashMap,TreeMap,LinkedHashMap;blog

Hashtable:内部存储的键值对是无序的是按照哈希算法进行排序,与 HashMap 最大的区别就是线程安全。键或者值不能为 null,为 null 就会抛出空指针异常。排序

TreeMap:基于红黑树 (red-black tree) 数据结构实现,按 key 排序,默认的排序方式是升序。

LinkedHashMap:有序的 Map 集合实现类,至关于一个栈,先 put 进去的最后出来,先进后出。

List 和 Map 区别?

一个是存储单列数据的集合,另外一个是存储键和值这样的双列数据的集合,List 中存储的数据是有顺序,而且容许重复;Map 中存储的数据是没有顺序的,其 key 是不能重复的,它的值是能够有重复的。

转自:https://baijiahao.baidu.com/s?id=1620007201190925694&wfr=spider&for=pc