黑马程序员技术交流社区

标题: Collection,List,Map,Set之间的关系 [打印本页]

作者: 蒋太原    时间: 2013-3-19 00:00
标题: Collection,List,Map,Set之间的关系
本帖最后由 真夏De樱花 于 2013-3-19 12:42 编辑

谁能详解下Collection,List,Map,Set之间的关系?

作者: 续圆凯    时间: 2013-3-19 00:06
本帖最后由 续圆凯 于 2013-3-19 00:17 编辑

Collection 是最基本的集合接口,一个容器( Collection )保存一组对象( Object ),即对象是容器的元素( Elements )。一些 Collection 允许相同的元素而另一些不行。一些能排序而另一些不行。 Java SDK 不提供直接继承自 Collection 的类, Java SDK 提供的类都是继承自 Collection 的 “ 子接口 ” 如 List 和 Set 。

List 是有序的 Collection  实现 List 接口的常用类有 LinkedList , ArrayList , Vector 和 Stack 。其中,最常用的是 LinkedList 和 ArrayList 两个。

Set 具有与 Collection 完全一样的接口,因此没有任何额外的功能,不像前面有几个不同的 List

Map 没有继承 Collection 接口, Map 提供 key 到 value 的映射,你可以通过“键”查找“值”。一个 Map 中不能包含相同的 key ,每个 key 只能映射一个 value 。 Map 接口提供 3 种集合的视图, Map 的内容可以被当作一组 key 集合,一组 value 集合,或者一组 key-value 映射。

作者: 祁振朋    时间: 2013-3-19 00:08
本帖最后由 祁振朋 于 2013-3-19 00:17 编辑

Collection 是对象集合, Collection 有两个子接口 List Set
List 可以通过下标 (1,2..) 来取得值,值可以重复
Set 只能通过游标来取值,并且值是不能重复的
ArrayList Vector LinkedList List 的实现类
ArrayList 是线程不安全的, Vector 是线程安全的,这两个类底层都是由数组实现的
LinkedList 是线程不安全的,底层是由链表实现的   

Map 是键值对集合
HashTable HashMap Map 的实现类   
HashTable 是线程安全的,不能存储 null    
HashMap 不是线程安全的,可以存储 null

作者: 边道坚    时间: 2013-3-19 00:14
http://bbs.itheima.com/thread-41791-1-1.html  这个是本站的贴子 挺详细的 你可以看看
作者: 黑马17期-闫东东    时间: 2013-3-19 00:20
Collection有两个直接扩展借口:List,Set.。
        |--List:元素是有序的,元素可以重复。因为该集合体系有索引。
                |--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
                |--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。
                |--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低
                     |--Set:元素是无序,元素不可以重复

|--HashSet:数据结构是哈希表。线程是非同步的。
       保证元素唯一性的原理:判断元素的hashCode值是否相同。
         如果相同,还会继续判断元素的equals方法,是否为true。

|--TreeSet:可以对Set集合中的元素进行排序。
                        底层数据结构是二叉树。
                        保证元素唯一性的依据:
                        compareTo方法return 0.
     TreeSet排序的第一种方式:让元素自身具备比较性。
                                元素需要实现Comparable接口,覆盖compareTo方法。
                                也种方式也成为元素的自然顺序,或者叫做默认顺序。
                               
        TreeSet的第二种排序方式。
当元素自身不具备比较性时,或者具备的比较性不是所要的。这时就需要让集合自身具备比较性。
在集合初始化时,就有了比较方式。
Map集合:该集合存储键值对。一对一对往里存。而且要保证键的唯一性。
        1,添加。
                put(K key, V value)
                putAll(Map<? extends K,? extends V> m)

        2,删除。
                clear()
                remove(Object key)

        3,判断。
                containsValue(Object value)
                containsKey(Object key)
                isEmpty()


        4,获取。
                get(Object key)
                size()
                values()

                entrySet()
                keySet()
map集合的两种取出方式:
1,Set<k> keySet:将map中所有的键存入到Set集合。因为set具备迭代器。
        所有可以迭代方式取出所有的键,在根据get方法。获取每一个键对应的值。
               

        Map集合的取出原理:将map集合转成set集合。在通过迭代器取出。


2,Set<Map.Entry<k,v>> entrySet:将map集合中的映射关系存入到了set集合中,
                                而这个关系的数据类型就是:Map.Entry

                                Entry其实就是Map中的一个static内部接口。
                                为什么要定义在内部呢?
                                因为只有有了Map集合,有了键值对,才会有键值的映射关系。
                                关系属于Map集合中的一个内部事物。
                                而且该事物在直接访问Map集合中的元素。
作者: 李阳    时间: 2013-3-19 00:28
临时话的不好看。

无标题1.png (11.77 KB, 下载次数: 30)

无标题1.png





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2