黑马程序员技术交流社区

标题: 关于集合的一些问题? [打印本页]

作者: 陈虹旭    时间: 2012-10-29 12:33
标题: 关于集合的一些问题?
复习的时候有点乱,搞不懂什么时候用什么集合...
List集合、Set集合和Map集合的区别在哪里,子类集合的结构及特点是什么?
一般什么情况使用List集合,什么时候使用Set集合,什么时候使用Map集合?

希望能讲的详细一点,谢谢各位大虾~~
作者: 李铁    时间: 2012-10-29 12:51
本帖最后由 李铁 于 2012-10-29 12:53 编辑

下面是我的学习日记里整理的,参考一下!
collection
               |--List:元素是有序的,元素可以有重复,因为该集合体系有索引。
                           |--ArrayList
                               底层数据结构是数组,线程不安全。
                               增删慢,查询快。
                           |--Vector
                               底层数据结构是数组,线程安全。
                              增删慢,查询快。但是,线程安全,效率就低。所以查询也慢。
                           |--LinkedList
                              底层数据结构是双向链表,线程不安全。
                             增删快,查询慢
            |  -- Set:元素是无序(存入与取出的顺序不一定一致),不可重复的。
                      |--HashSet:底层数据是哈希表,线程是非同步的。
                                       HashSet是如何保证元素的唯一性的呢?
                                       是通过两个元素的hashcode和equals来完成的,
                                       如果元素的hashcode的值相同,才会判断equals是否为true,
                                       如果元素的hashcode的值不同,不会调用equals方法。
                                       注意:对于判断元素的是否存在,以及删除操作,依赖的方法是元素的hashcode与equals方法


                     |--TreeSet:可以对Set集合中的元素进行排序,底层数据是二叉树;保证元素的唯一性的依据,compareTo方法return 0。
                                        TreeSet的第一种排序方式:让元素自身具备比较性,元素需要实现compareble接口,
                                        覆盖compartTo方法;也叫元素的自然顺序,或者是默认顺序。
                                        TreeSet的第二种排序方式:当元素自身不具备比较性,或者具备的比较不是所需要的;
                                         这时需要让容器自身具备比较性。
                                         定义一个类,实现comparator接口,覆盖compare方法。
                                         当两种排序都存在的时候,以比较器为主;开发建议使用第二种排序。
                                         注意当排序时,当主要条件相同时,一定判断一下次要条件。
Map:该集合储存键傎对,一对一的往里存,而且要保持键的唯一性。
              |--HashTable:底层是哈希表数据结构,不可以存入null键null值,该集合是线程同步的,jdk1.0;效率低!
              |--HashMap:底层是哈希表数据结构,允许使用入null键null值,该集合是不同步的,将HashTable代替,jdk1.2,效率高!
              |--TreeMap: 底层是二叉树数据结构,线程不同步;可以用于给Map集合中的键进行排序。和set很像,set底层就是用了Map集合。      

作者: 崔政    时间: 2012-10-29 12:53
楼上的答案已经让我不知道说什么好了。
我想说的和他一样- -
作者: 廖智    时间: 2012-10-29 13:25
本帖最后由 廖智 于 2012-10-29 13:27 编辑

Collection和Map是集合框架中的两个顶层接口。
而List和Set都是Collection集合中的常用的子接口。
他们之间的关系层次和特点:
Collection接口(单列集合):Collcetion和它的子类一次只能存储一个元素,称为但列集合。
        |--List接口:
                特点:
                1、存储的元素顺序和取出元素的顺序一致。
                2、该集合中的元素都有索引,可以通过索引来访问元素。
                3、可以存储重复元素(重点)。
        |--Set接口:。
                特点:1、不能存储重复元素。
Map接口(双列集合):Map和它的子类一次能存储一对元素,称为双列集合。存储的都是具备对应关系的键和值。
        想要取出元素,必须得先转成Set集合才能取。


集合什么时候使用?
        什么时候使用map(双列集合):
                当分析问题时,发现其中存在着映射关系,这时应该考虑两个容器,一个是map,一个是数组。
                如果映射关系的一方是有序的编号(可以作为角标),而且映射关系的个数确定,建议使用数组。
                否则,就是用map集合。
        单列集合什么时候使用?(单列集合)
                set集合:如果要保证元素的唯一性,不存在映射关系,必须先考虑set集合。
                List集合:如果不需要保证唯一性,直接考虑List集合。
               




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