黑马程序员技术交流社区

标题: 学习集合…郁闷中,给我点建议 [打印本页]

作者: 咪咪    时间: 2011-11-14 20:37
标题: 学习集合…郁闷中,给我点建议
今天看集合方面的视频,晕呼呼的,java中有set.list.map 这么多集合,都是为了存储类型不同的对象,但在用时都又用泛型进行了限制不还是用来存放一个类型的对象吗?引入泛型后迷啊迷。这些集合我只觉得arrylist在.net中很常用。大家给点学习意见。
作者: 宋文轩    时间: 2011-11-14 20:47
Collection:
        |--List:有序,可重复,有索引。
                |--ArrayList:底层是数组结构。是线程不同步的。 查询速度快。
                |--LinkedList:底层是链表结构。是线程不同的。增删速度快。
                |--Vector:底层是数组结构。是线程同步的。无论查询和增删,慢就一个字。
        |--Set:无序,不可以重复。
                |--HashSet:底层是哈希表数据结构,它是如何保证元素唯一性的呢?
                                        是通过元素对象的hashCode方法和equals方法来保证元素唯一性。
                                        先判断元素对象的hash值是否相同。
                                        如果不同:直接存储,不判断equals。
                                        如果相同:在判断一次equals。

                                        如果equals返回false:视为两个对象不同,存储。在一个hash位置进行桶结构的存储。
                                        如果返回true:视为两个元素相同。不存储。

                |--TreeSet:可以给Set集合中的元素进行排序。
                                        怎么排的序呢?就是比较嘛。
                                        底层是二叉树数据结构。大于返回正数,小于返回负数,等于返回0;                                       
                                        是如何保证元素唯一性的呢?
                                        只要是比较完的结果是0,就视为同一个元素,不存。

                                        排序有两种方式:
                                        1,让元素自身具备比较性。让元素去实现Comparable接口,覆盖compareTo方法。
                                                这种排序成为该对象的自然顺序。
                                        2,但是元素自身如果没有具备比较性,或者元素自身的具备比较性都是所需要的,这时怎么排序呢?
                                                既然元素无法进行自然排序。
                                                我们可以让集合自身具备比较性,那就是在创建集合时,就要有比较的动作。
                                                既然是创建对象时就要具备,那么一定在构造函数中完成。
Map:
        |--Hashtable:底层是哈希表。线程是同步的,不允许null键,null值的存在。被HashMap取代。
        |--HashMap:底层是哈希表。线程是不同步的。允许null键,null值的存在。
                |--LinkedHashMap:融入了链表结构的哈希表,增删效率很快,可以保证有序(存储和取出的顺序一致)。
        |--TreeMap:底层是二叉树,用于给map中的键进行排序。
自己总结的 你可以参考一下 可能会让思路清晰一点
作者: 咪咪    时间: 2011-11-14 20:59
谢谢,总结的很详细,你有没有比这在具体的代码说明啊,发给我一份,550697203@qq.com




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