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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曾林魁 中级黑马   /  2013-6-1 12:46  /  2818 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 曾林魁 于 2013-6-1 21:09 编辑

为什么在集合框架中Set集合与Collection基本相同;为什么还要有Set;
有点不明白希望大家帮我解释一下;先谢谢了

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

6 个回复

倒序浏览
collection派生出set和list两个子接口,而set不能存放重复的数据,list是用链表的数据结构实现的,查询快,插入数据相对较慢。

HashSet Student =  new ArrayList();能通过是因为new对象时像上转型为collection了。java集合树形结构图如下,你一下就明白了。
  1. Collection
  2.   ├List
  3.   │  ├LinkedList
  4.   │  ├ArrayList
  5.   │  └Vector
  6.   │  └Stack
  7.   ├Set
  8.     ├ HashSet
  9.     ├ TreeSet
  10.   Map
  11.   ├  Hashtable
  12.   ├  HashMap
  13.   └  WeakHashMap
复制代码

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
我学的时候做的笔记,很清晰

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的第二种排序方式。
                                当元素自身不具备比较性时,或者具备的比较性不是所需要的。
                                这时就需要让集合自身具备比较性。
                                在集合初始化时,就有了比较方式

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
为啥我编译通不过呀{:soso_e109:}
回复 使用道具 举报
HashSet Student =  new ArrayList();你确定编译能通过?
collection能分出来子类list和set正是因为他们的数据结构不同;List:元素是有序的,元素可以重复。因为该集合体系有索引。Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。
集合框架体系:
Collection
  ├List
  │  ├LinkedList
  │  ├ArrayList
  │  └Vector
  │  └Stack
  ├Set
    ├ HashSet
    ├ TreeSet
  Map
  ├  Hashtable
  ├  HashMap
  └  WeakHashMap
HashSet和Arraylist父类都不一样,怎么能编译成功呢

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
如果问题已解决,请及时修改分类,否则继续提问,谢谢合作!
回复 使用道具 举报
刘瑞 中级黑马 2014-9-18 09:54:27
7#
littlefoxtail 发表于 2013-6-1 13:08
为啥我编译通不过呀{:soso_e109:}

他写错了,应该是Collection 不是HashSet
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马