Skip to content

2019-08-13:谈谈List,Set,Map的区别? #120

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
MoJieBlog opened this issue Aug 13, 2019 · 16 comments
Open

2019-08-13:谈谈List,Set,Map的区别? #120

MoJieBlog opened this issue Aug 13, 2019 · 16 comments

Comments

@MoJieBlog
Copy link
Collaborator

No description provided.

@DaveBoy
Copy link

DaveBoy commented Aug 13, 2019

有序,唯一,键值对

@gabyallen
Copy link

它们分别代表列表,集,映射;区别有序,唯一,键值对

@XZXSean
Copy link

XZXSean commented Aug 13, 2019

List:有序,可重复
set:无序,单一元素,集合
map:键值对

@futurereal
Copy link

List是集合, 子类有 ArrayList LinkedList, . Set 有 HashSet TreeSet . Map: HashMap, tree
Map . 拷贝方式,数据机构。

@lvguanyingx
Copy link

List中存储的数据是有顺序的,并且值允许重复;Map中存储的数据是无序的,它的键是不允许重复的,但是值是允许重复的;Set中存储的数据是无顺序的,并且不允许重复,但元素在集合中的位置是由元素的hashcode决定,即位置是固定的(Set集合是根据hashcode来进行数据存储的,所以位置是固定的,但是这个位置不是用户可以控制的,所以对于用户来说set中的元素还是无序的)

版权声明:本文为CSDN博主「Java星」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yangxingpa/article/details/81023138

@MrShuHong
Copy link

List和Set都实现了Collection接口,Map是单独存在的, List存储有序可重复集合,Set是无序不可重复集合,Map是存储的是键值对数据集合。 List子类中有ArrayList和Vactor和LinedList,ArrayList和Vactor都是用单项数组实现,差别是vactor是线程安全的,arraylist不是,对应的HashMap和HashTable也是这种关系

@syx103
Copy link

syx103 commented Nov 12, 2019

List和Set都实现了Collection接口,Map是一个单独的接口
List 存放有序(怎么存入,怎么取出),允许存入重复元素,可以出现多个NULL值。
Set存放无序,不允许存入重复元素,只能存有一个NULL值,是基于Map实现的,底层存储使用hashcode(),我们不能操作他的位置,
Map是一个单独的接口,以键值对的形式存放数据,键值不允许重复,数值存放可以重复,一个键必须对应一个值,

@chunlinchulv
Copy link

List中的元素,有序、可重复、可为空;
Set中的元素,无序、不重复、只有一个空元素;
Map中的元素,无序、键不重,值可重、可一个空键、多可空值;

@feelschaotic
Copy link

有趣一点学技术

一、一个萝卜一个坑 —— List

  1. List 底层就是个 Object[],所以逻辑上是挨在一起的(连续);
  2. 你们这几个萝卜都是有序号的,叫到号出列!

二、暗度陈仓 —— Set

你去看看 Set 的两个实现类(TreeSet、HashSet)源码,就会发现底层存储结构都是用的map,把 set 的值放在 map 的 key 里的,value 是一个共用的 object 对象。

所以 Set 的特点也就是 Map 的 Key 的特点:

  1. map 中 key 是不允许重复的,这样 Set 中的值也不能重复了
  2. map 的 key 是无序存放的,Set 也就无序

三、我不管数据存哪了,给你个通行证,你把它给我找出来! —— Map

  1. 数据和通行证有着映射关系;
  2. 既然是通行证,那就不可重复(键不重复),不然 A 取了 B 的数据多尴尬?

@hy20160705
Copy link

hy20160705 commented Aug 19, 2020

有趣一点学技术

一、一个萝卜一个坑 —— List

  1. List 底层就是个 Object[],所以逻辑上是挨在一起的(连续);
  2. 你们这几个萝卜都是有序号的,叫到号出列!

二、暗度陈仓 —— Set

你去看看 Set 的两个实现类(TreeSet、HashSet)源码,就会发现底层存储结构都是用的map,把 set 的值放在 map 的 key 里的,value 是一个共用的 object 对象。

所以 Set 的特点也就是 Map 的 Key 的特点:

  1. map 中 key 是不允许重复的,这样 Set 中的值也不能重复了
  2. map 的 key 是无序存放的,Set 也就无序

三、我不管数据存哪了,给你个通行证,你把它给我找出来! —— Map

  1. 数据和通行证有着映射关系;
  2. 既然是通行证,那就不可重复(键不重复),不然 A 取了 B 的数据多尴尬?

其实说「List」底层就是个Object[]是有歧义的 比如LinkedList的实现最终是一个链表,所有的增删查改都是基于链表来做的

@qweenhool
Copy link

那些说Set是无序的,知不知道有个实现类叫LinkedHashSet?Set只是不能有重复的元素,其他的说多了都是扯淡,建议读一下《Java编程思想》——持有对象一章。

@DaveBoy
Copy link

DaveBoy commented Jul 29, 2021

那些说Set是无序的,知不知道有个实现类叫LinkedHashSet?Set只是不能有重复的元素,其他的说多了都是扯淡,建议读一下《Java编程思想》——持有对象一章。

大家说的都是广义上的set特性。
那要你这么说,你介绍set还得把每种set的特性都算在set上?
那要你这么说,map不也是有序的,map也有对应实现,map岂不是插入有序的,也有对应实现?
谈的是共同群体的普遍性,而不是单独特定个体的特性。

@qweenhool
Copy link

那些说Set是无序的,知不知道有个实现类叫LinkedHashSet?Set只是不能有重复的元素,其他的说多了都是扯淡,建议读一下《Java编程思想》——持有对象一章。

大家说的都是广义上的set特性。
那要你这么说,你介绍set还得把每种set的特性都算在set上?
那要你这么说,map不也是有序的,map也有对应实现,map岂不是插入有序的,也有对应实现?
谈的是共同群体的普遍性,而不是单独特定个体的特性。

认同的人自然认同,不认同的我也不强求你认同。

@houqingfeng
Copy link

List:An ordered collection (also known as a sequence).
Set:A collection that contains no duplicate elements.
Map:An object that maps keys to values.

@hilaryhar
Copy link

List:
List 是一种有序的集合,可以包含重复的元素。List 中的每个元素都有一个索引,可以根据索引来访问 List 中的元素。常用的 List 实现类有 ArrayList、LinkedList 和 Vector。

Set:
Set 是一种不允许重复元素的集合,它不保证元素的顺序。Set 中的元素必须实现 hashCode() 和 equals() 方法,以便判断元素是否重复。常用的 Set 实现类有 HashSet、TreeSet 和 LinkedHashSet。

Map:
Map 是一种键值对的集合,每个元素包含一个键和一个值。Map 中的键必须是唯一的,而值可以重复。Map 中的元素是无序的。常用的 Map 实现类有 HashMap、TreeMap 和 LinkedHashMap。

@luckilyyg
Copy link

luckilyyg commented Aug 4, 2023 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests