A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

最近在广州面试,偶尔会提到Map,List,Set的区别,我想问问实现功能到底有什么区别?

24 个回复

倒序浏览
LIst和Set是单列集合     
   List集合元素可以重复,有序。
   Set集合元素不重复,无序。

Map集合是双列集合
    有键和值。你可以理解是一次性存入一对数据
回复 使用道具 举报
与梦逆风而行 发表于 2014-12-9 18:51
LIst和Set是单列集合     
   List集合元素可以重复,有序。
   Set集合元素不重复,无序。

多谢,那编写时是否要继承接口?
回复 使用道具 举报
本帖最后由 曛丨黯淡浮华 于 2014-12-10 19:49 编辑

List    ---  有序集合,元素可以重复 (ArrayList)
Set    ---  无序集合,元素不可重复 (HashSet)
Map  --- 有序集合,key + value 的形式存储元素,key是唯一的,value可以重复 (HashMap)

List 集合常用的实现类: ArrayList
Set 集合常用的实现类: HashSet
Map 集合常用的实现类: HashMap

注意: List, Set, Map 是不能实例化的,需要通过子类来实现。
回复 使用道具 举报 0 2
看评论都学习了
回复 使用道具 举报
呵呵  还没学到那里呢
回复 使用道具 举报
Rdw 初级黑马 2014-12-9 20:37:34
7#
学习了!!
回复 使用道具 举报
我只是一只菜鸟 发表于 2014-12-9 19:18
多谢,那编写时是否要继承接口?

类是继承 ,   接口是实现,这个别搞混了:)

List 集合常用的实现类: ArrayList
Set 集合常用的实现类: HashSet
Map 集合常用的实现类: HashMap
回复 使用道具 举报
与梦逆风而行 发表于 2014-12-9 20:39
类是继承 ,   接口是实现,这个别搞混了

List 集合常用的实现类: ArrayList

恩,受教了,我编程是还遇到TreeSet是什么呢?
回复 使用道具 举报
List,Set,Map是否继承自Collection接口?
答:List,Set是,Map不是。 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java JDK不能提供直接继承自Collection的类,Java JDK提供的类都是继承自Collection的"子接口",如:List和Set。
注意:Map没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同key,每个key只能映射一个value。Map接口提供3种集合的视图,Map的内容可以被当做一组key集合,一组value集合,或者一组key-value映射。
List按对象进入的顺序保存对象,不做排序或编辑操作。Set对每个对象只接受一次,并使用自己内部的排序方法(通常,你只关心某个元素是否属于Set,而不关心它的顺序--否则应该使用List)。Map同样对每个元素保存一份,但这是基于"键"的,Map也有内置的排序,因而不关心元素添加的顺序。如果添加元素的顺序对你很重要,应该使用 LinkedHashSet或者LinkedHashMap.

详细介绍:
List特点:元素有放入顺序,元素可重复
Map特点:元素按键值对存储,无放入顺序
Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的)
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 有序 。


List的功能方法
  实际上有两种List: 一种是基本的ArrayList,其优点在于随机访问元素,另一种是更强大的LinkedList,它并不是为快速随机访问设计的,而是具有一套更通用的方法。
  List : 次序是List最重要的特点:它保证维护元素特定的顺序。List为Collection添加了许多方法,使得能够向List中间插入与移除元素(这只推荐LinkedList使用。)一个List可以生成ListIterator,使用它可以从两个方向遍历List,也可以从List中间插入和移除元素。
  ArrayList : 由数组实现的List。允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢。ListIterator只应该用来由后向前遍历ArrayList,而不是用来插入和移除元素。因为那比LinkedList开销要大很多。
  LinkedList : 对顺序访问进行了优化,向List中间插入与删除的开销并不大。随机访问则相对较慢。(使用ArrayList代替。)还具有下列方法:addFirst(), addLast(), getFirst(), getLast(), removeFirst() 和 removeLast(), 这些方法 (没有在任何接口或基类中定义过)使得LinkedList可以当作堆栈、队列和双向队列使用。
  Set的功能方法
  Set具有与Collection完全一样的接口,因此没有任何额外的功能,不像前面有两个不同的List。实际上Set就是Collection,只是行为不同。(这是继承与多态思想的典型应用:表现不同的行为。)Set不保存重复的元素(至于如何判断元素相同则较为负责)
  Set : 存入Set的每个元素都必须是唯一的,因为Set不保存重复元素。加入Set的元素必须定义equals()方法以确保对象的唯一性。Set与Collection有完全一样的接口。Set接口不保证维护元素的次序。
  HashSet : 为快速查找设计的Set。存入HashSet的对象必须定义hashCode()。
  TreeSet : 保存次序的Set, 底层为树结构。使用它可以从Set中提取有序的序列。
  LinkedHashSet : 具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。
  Map的功能方法
  方法put(Object key, Object value)添加一个“值”(想要得东西)和与“值”相关联的“键”(key)(使用它来查找)。方法get(Object key)返回与给定“键”相关联的“值”。可以用containsKey()和containsValue()测试Map中是否包含某个“键”或“值”。标准的Java类库中包含了几种不同的Map:HashMap, TreeMap, LinkedHashMap, WeakHashMap, IdentityHashMap。它们都有同样的基本接口Map,但是行为、效率、排序策略、保存对象的生命周期和判定“键”等价的策略等各不相同。
  执行效率是Map的一个大问题。看看get()要做哪些事,就会明白为什么在ArrayList中搜索“键”是相当慢的。而这正是HashMap提高速度的地方。HashMap使用了特殊的值,称为“散列码”(hash code),来取代对键的缓慢搜索。“散列码”是“相对唯一”用以代表对象的int值,它是通过将该对象的某些信息进行转换而生成的。所有Java对象都能产生散列码,因为hashCode()是定义在基类Object中的方法。
  HashMap就是使用对象的hashCode()进行快速查询的。此方法能够显著提高性能。
  Map : 维护“键值对”的关联性,使你可以通过“键”查找“值”
  HashMap : Map基于散列表的实现。插入和查询“键值对”的开销是固定的。可以通过构造器设置容量capacity和负载因子load factor,以调整容器的性能。
  LinkedHashMap : 类似于HashMap,但是迭代遍历它时,取得“键值对”的顺序是其插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一点。而在迭代访问时发而更快,因为它使用链表维护内部次序。
  TreeMap : 基于红黑树数据结构的实现。查看“键”或“键值对”时,它们会被排序(次序由Comparabel或Comparator决定)。TreeMap的特点在于,你得到的结果是经过排序的。TreeMap是唯一的带有subMap()方法的Map,它可以返回一个子树。
  WeakHashMao : 弱键(weak key)Map,Map中使用的对象也被允许释放: 这是为解决特殊问题设计的。如果没有map之外的引用指向某个“键”,则此“键”可以被垃圾收集器回收。
  IdentifyHashMap : 使用==代替equals()对“键”作比较的hash map。专为解决特殊问题而设计。

评分

参与人数 1技术分 +1 收起 理由
船长 + 1 很给力!

查看全部评分

回复 使用道具 举报
list集合是有序的可以重复的
set集合是无序不能重复
回复 使用道具 举报
曛丨黯淡浮华 发表于 2014-12-9 19:30
List    ---  有序集合,元素可以重复 (ArrayList)
Set    ---  无序集合,元素不可重复 (HashSet)
Map   ...

胡扯吧 set 怎么是无序的,TreeSet 是你用比较器比较完了的数据才放在集合中,根本就是二叉树的方式排序的怎么能是无序呢,HashSet 勉强算是存入和取出不一致,但是只要是利用哈希算法的数据结构肯定都不一致,你又怎么能说set 是无序的呢。倒霉java 书瞎写你也不琢磨琢磨,Set 要我说唯一和list 的使用区别就是set 有比较器功能,防止了同样的内容放在set 中
回复 使用道具 举报
wangcongwu 发表于 2014-12-10 13:26
胡扯吧 set 怎么是无序的,TreeSet 是你用比较器比较完了的数据才放在集合中,根本就是二叉树的方式排序 ...

很高兴你可以指正,

Set 之所以叫无序集合, 你知道什么意思吗 ~

list --- >  我创建了一个arrylist,  我添加数据,假设我加入了5-1的数字,那么遍历出来也是5-1.对吧?

set --- > 我创建了个TreeSet,那么我添加数据,假设我加入了5-1的数字,那么遍历出来也是5-1吗?

TreeSet 的特点就在于它会自己排序,底层数据结构是二叉树。默认是有自然循序,它会对自身对元素
排序 ,我这这样存进去的,它可能不会遍历出我想要的。当然,它可以通过实现Comparable接口定义
一套规则,它只要按照我的规则,我就能得到我想要的, 当然,这是后话,默认情况下,它就是无序输出

你确定你看懂了书了吗?   你甚至连什么叫有序,什么有无序你都不懂,你凭什么反驳我的 ——
胡扯,你压根就没看懂我说什么,有序无序指的是输出是不是按我添加的时候来衡量的,并不是排序 ——

有序: 我按照我的循序从5开始添加,添加到1,那么遍历出来的是5,4,3,2,1 它是按照我添加的格式,
          有序的遍历出来。

无序: 我按到我的循序从5开始添加,添加到1,那么遍历出来肯定是5,4,3,2,1 吗, TreesSet能做到,
          我知道,但是它默认情况下, 它是按照二叉树的体系结构,得到的并非我想要的,他遍历出来
          是1,2,3,4,5,   这是我存进去的循序吗,答案很显然不是。

回复 使用道具 举报
曛丨黯淡浮华 发表于 2014-12-10 15:19
很高兴你可以指正,

Set 之所以叫无序集合, 你知道什么意思吗 ~

你家字典里怎么定义的无序还是有序 你觉得你输入进去的和你输出出来的不一样就是无序的吗 输出和输入不一样撑死叫做输出和输入不同,怎么能叫做有序呢
看看字典里咋解释无序的含义:
有序
yǒuxù
〖ordered〗
具有按规律接连起来的元素;特指具有每对不同元素以不对称的传递关系相连系着的性质
有指定的首元素
溶剂和溶质的原子有规则地排列为特征
有血有肉
http://xh.5156edu.com/html3/13830.html
你都 便利出来都是 1 2 3 4 5 了怎么不是有序的你告诉我你无序的存进去,他给你有序的存入TreeSet 里边,你怎么能说TreeSet 是无序的呢。小学语文是体育老师教的还是体育老师死的早
回复 使用道具 举报
曛丨黯淡浮华 发表于 2014-12-10 15:19
很高兴你可以指正,

Set 之所以叫无序集合, 你知道什么意思吗 ~

你家字典里怎么定义的无序还是有序 你觉得你输入进去的和你输出出来的不一样就是无序的吗 输出和输入不一样撑死叫做输出和输入不同,怎么能叫做有序呢
看看字典里咋解释有序的含义:
有序
yǒuxù
〖ordered〗
具有按规律接连起来的元素;特指具有每对不同元素以不对称的传递关系相连系着的性质
有指定的首元素
溶剂和溶质的原子有规则地排列为特征
有血有肉
http://xh.5156edu.com/html3/13830.html
你都 便利出来都是 1 2 3 4 5 了怎么不是有序的。你我你无序的存进去,它给你有序的存入TreeSet 里边,你怎么能说TreeSet 是无序的呢。小学语文是体育老师教的还是体育老师死的早。
回复 使用道具 举报
曛丨黯淡浮华 发表于 2014-12-10 15:19
很高兴你可以指正,

Set 之所以叫无序集合, 你知道什么意思吗 ~

你家字典里怎么定义的无序还是有序 你觉得你输入进去的和你输出出来的不一样就是无序的吗 输出和输入不一样撑死叫做输出和输入不同,怎么能叫做无序呢
看看字典里咋解释有序的含义:
有序
yǒuxù
〖ordered〗
具有按规律接连起来的元素;特指具有每对不同元素以不对称的传递关系相连系着的性质
有指定的首元素
溶剂和溶质的原子有规则地排列为特征
有血有肉
http://xh.5156edu.com/html3/13830.html
你都 便利出来都是 1 2 3 4 5 了怎么不是有序的。你无序的存进去,它给你有序的存入TreeSet 里边,你怎么能说TreeSet 是无序的呢。小学语文是体育老师教的还是体育老师死的早。
回复 使用道具 举报
曛丨黯淡浮华 发表于 2014-12-10 15:19
很高兴你可以指正,

Set 之所以叫无序集合, 你知道什么意思吗 ~

书上说的有序和无序本来就是翻译有问题,字面的意思和本身的含义根本不一样,书上的翻译应该是TreeSet 是不同序,而不是无序,你看书就是死背里边的意思也不去体会就瞎说。我水平也不高但是我不认为书上说的这点就是对的最起码说TreeSet 是无序的就是有歧义会误导读者。
回复 使用道具 举报
曛丨黯淡浮华 发表于 2014-12-10 15:19
很高兴你可以指正,

Set 之所以叫无序集合, 你知道什么意思吗 ~

书上说的有序和无序本来就是翻译有问题,字面的意思和本身的含义根本不一样,书上的翻译TreeSet 应该是不同序,而不是无序,你看书就是死背里边的意思也不去体会就瞎说。我水平也不高但是我不认为书上说的这点就是对的最起码说TreeSet 是无序的就是有歧义会误导读者。
回复 使用道具 举报
wangcongwu 发表于 2014-12-10 18:28
你家字典里怎么定义的无序还是有序 你觉得你输入进去的和你输出出来的不一样就是无序的吗 输出和输入不一 ...

你如果非要跟我扯书上写的都对按照说上说的是啥就是啥那我也没啥好说的了,你自己去背书吧,拜拜不送
回复 使用道具 举报
wangcongwu 发表于 2014-12-10 18:38
你如果非要跟我扯书上写的都对按照说上说的是啥就是啥那我也没啥好说的了,你自己去背书吧,拜拜不送 ...

你个死脑筋,自己转不过来少来跟我说书的事,别跟我复制一大堆的, 我看不看书关你屁事 。

我不管字典是怎么去讲解,但是书上,视频上,请看老毕的视频 ——  看看是不是说无序 ——

而且大部分人说的有序和无序 , 就是输入跟输出的分别, 你自己没有读好书,脑筋转不来我不怪你。

中文文字博大精深,很多时候表达意思都不一样 , 我看你才是死记的, 这词都给你记死了 ~

正如我问候你妈 , 你觉得我是哪层意思呀 —— 呵呵。

回复 使用道具 举报 0 1
12下一页
您需要登录后才可以回帖 登录 | 加入黑马