黑马程序员技术交流社区
标题:
List, Set, Map是否继承自Collection接口?为什么?
[打印本页]
作者:
疯狂程序
时间:
2013-3-23 23:38
标题:
List, Set, Map是否继承自Collection接口?为什么?
本帖最后由 疯狂程序 于 2013-3-24 20:21 编辑
List, Set, Map是否继承自Collection接口?为什么?
作者:
全超
时间:
2013-3-24 00:10
Collection:集合框架体系中的顶层接口, List和Set都是它的子接口
List:元素是有序的,元素可以重复。该体系特有操作角标的方法。
Set:元素是无序的,元素不可以重复。set底层使用的其实就是Map集合。
Map:也是集合框架体系中的顶层接口;该集合存储的是键值对。该集合存储的是键值对,并且一对一对往里存。
作者:
朱盛文
时间:
2013-3-24 00:32
Collection体系:
|--List
元素有序(存入顺序和取出顺序一致),元素可以重复
|--ArrayList
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
|--Vector
底层数据结构是数组,查询快,增删慢。
线程安全,效率低。
|--LinkedList
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。
|--Set
元素无序,元素要保证唯一
|--HashSet
底层数据结构是哈希表。
如何保证元素的唯一性呢?
它依赖两个方法:hashCode()和equals()
首先判断哈希值是否相同:
不同:就把元素添加到集合中。
相同:继续进入equals方法比较
返回true,说明元素重复,不存。
返回false,就把元素添加到集合中。
|--TreeSet
底层数据结构是二叉树。
可以让集合中的元素排序。
如何保证元素的唯一性的呢?
它是根据比较返回的值是0,说明元素是重复的,就不添加。
有两种实现方案:
A:让自定义对象具备比较性
实现Comparable接口
B:让集合具备比较性
实现Comparator接口
Map体系:(Map体系的数据结构对键有效,跟值无关)
|--HashMap
底层数据结构是哈希表。
如何保证键的唯一性呢?
依赖hashCode()和equals()方法
线程不安全,效率高。允许null键和值。
|--Hashtable
底层数据结构是哈希表。
如何保证键的唯一性呢?
依赖hashCode()和equals()方法
线程安全,效率低。不允许null键和值。
|--TreeMap
底层数据结构是二叉树。
如何保证键的唯一性呢?
两种方式:
自定义元素具备比较性
集合具备比较性
线程不安全,效率高。允许null值,不允许null键。
所以List, Set是否继承自Collection接口,而Map不是,Map又是另一个集合体系。
作者:
谷文仁
时间:
2013-3-24 00:46
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 有序
作者:
骐骏
时间:
2013-3-26 20:24
这是我之前学习时记得笔记。很清晰,加上楼上的回复感觉很有收获。
BD}R2N3P7_006(5LGASS}[2.jpg
(27.35 KB, 下载次数: 47)
下载附件
2013-3-26 20:22 上传
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2