黑马程序员技术交流社区
标题:
集合框架中的小问题
[打印本页]
作者:
曾林魁
时间:
2013-6-1 12:46
标题:
集合框架中的小问题
本帖最后由 曾林魁 于 2013-6-1 21:09 编辑
为什么在集合框架中Set集合与Collection基本相同;为什么还要有Set;
有点不明白希望大家帮我解释一下;先谢谢了
作者:
刘海芳
时间:
2013-6-1 12:57
collection派生出set和list两个子接口,而set不能存放重复的数据,list是用链表的数据结构实现的,查询快,插入数据相对较慢。
HashSet Student = new ArrayList();能通过是因为new对象时像上转型为collection了。java集合树形结构图如下,你一下就明白了。
Collection
├List
│ ├LinkedList
│ ├ArrayList
│ └Vector
│ └Stack
├Set
├ HashSet
├ TreeSet
Map
├ Hashtable
├ HashMap
└ WeakHashMap
复制代码
作者:
赵乐
时间:
2013-6-1 13:02
我学的时候做的笔记,很清晰
Collection
|--
List
:元素是有序的,元素可以重复。因为该集合体系有索引。
|--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
|--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。
|--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。
|--
Set
:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。、
|--HashSet:底层数据结构是哈希表。是线程不安全的。不同步。
HashSet是如何保证元素唯一性的呢?
是通过元素的两个方法,hashCode和equals来完成。
如果元素的HashCode值相同,才会判断equals是否为true。
如果元素的hashcode值不同,不会调用equals。
注意,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals方法。
|--TreeSet:可以对Set集合中的元素进行排序。
底层数据结构是二叉树。
保证元素唯一性的依据:
compareTo方法return 0.
TreeSet排序的第一种方式:让元素自身具备比较性。
元素需要实现Comparable接口,覆盖compareTo方法。
也种方式也成为元素的自然顺序,或者叫做默认顺序。
TreeSet的第二种排序方式。
当元素自身不具备比较性时,或者具备的比较性不是所需要的。
这时就需要让集合自身具备比较性。
在集合初始化时,就有了比较方式
作者:
littlefoxtail
时间:
2013-6-1 13:08
为啥我编译通不过呀{:soso_e109:}
作者:
msileandroid
时间:
2013-6-1 15:09
HashSet Student = new ArrayList();你确定编译能通过?
collection能分出来子类list和set正是因为他们的数据结构不同;List:元素是有序的,元素可以重复。因为该集合体系有索引。Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。
集合框架体系:
Collection
├List
│ ├LinkedList
│ ├ArrayList
│ └Vector
│ └Stack
├Set
├ HashSet
├ TreeSet
Map
├ Hashtable
├ HashMap
└ WeakHashMap
HashSet和Arraylist父类都不一样,怎么能编译成功呢
作者:
殇_心。
时间:
2013-6-1 18:04
如果问题已解决,请及时修改分类,否则继续提问,谢谢合作!
作者:
刘瑞
时间:
2014-9-18 09:54
littlefoxtail 发表于 2013-6-1 13:08
为啥我编译通不过呀{:soso_e109:}
他写错了,应该是Collection 不是HashSet
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2