黑马程序员技术交流社区

标题: 关于集合中Set和Map的问题 [打印本页]

作者: 高会仁    时间: 2012-12-8 21:43
标题: 关于集合中Set和Map的问题
1.什么时候用HashSet,什么时候用TreeSet?
2、什么时候用HashMap,什么时候用用TreeMap?
对于这两个问题,以及每个问题中在什么情况下该用哪个,有点晕了
作者: 赵保磊    时间: 2012-12-8 22:39
本帖最后由 赵保磊 于 2012-12-8 22:44 编辑

HashSet底层数据结构式哈希表,TreeSet底层数据结构式二叉树。
Set和List的主要区别是List中存储的元素可以重复,Set中的元素是无序的,也就是存储和取出的顺序不一致。
ArrayList底层数据结构是数组,而数组是有index的,所以元素可以重复,查找的时候可以根据index查找相对于的元素。
LinkedList底层数据结构式链表结构,与ArrayList的主要区别是查询速度慢,增删速度快。所以对于查询比较频繁的可以选择用ArrayList存储。

哈希表中存储的是哈希值,每个元素都有其对应的哈希值。用HashSet存储自定义对象时首先要想到复写其HashCode()和equals()方法。
TreeSet是二叉树,所以在用TreeSet时首先要考虑到的是implements  Comparable 复写其compareTo方法。还有自定义比较器Comparator和其compare方法。

什么时候用二叉树?
二叉树的主要特点是可以对元素进行排序,按年龄或者姓名等等。所以如果要求存储的对象不重复,并且需要排序时用TreeSet;
要求元素不重复,不需要排序时一般选择HashSet

Map和Set差不多,主要区别在于Map存储的是成对存储的,即有键值映射关系。Set底层用的是Map;
         声明: 完全个人总结,如有错别,则以标准答案为依据。
作者: 田宇鹤    时间: 2012-12-9 13:35
        如果你使用的集合要保证元素唯一:Set
                你想排序吗?
                        不想:HashSet
                        想:TreeSet
               
                不懂:HashSet

        如果你使用的集合不用保证元素唯一:List
                你是用于查询吗?ArrayList
                你是用经常改变吗?LinkedList
                有多线程安全问题吗?Vector

                我真的不懂:ArrayList

        小技巧:
        Array:说明底层数据结构是数组,查询快,增删慢
        Link:说明底层数据结构是链表,查询慢,增删快
        Hash:说明底层数据结构是哈希表,保证元素唯一,要依赖hashCode和equals。
        Tree:说明底层数据结构是二叉树,有两种方案保证唯一和排序:
                1:Comparable -- compareTo
                2:Comparator -- compare


作者: 汪磊    时间: 2012-12-9 22:01
1、TreeSet 是二差树实现的,Treeset中的数据是自动排好序的,不允许放入null值

2、HashSet 是哈希表实现的,HashSet中的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复,就如数据库中唯一约束

3、HashSet要求放入的对象必须实现HashCode()方法,放入的对象,是以hashcode码作为标识的,而具有相同内容的 String对象,hashcode是一样,所以放入的内容不能重复。但是同一个类的对象可以放入不同的实例
作者: 吴健    时间: 2012-12-9 22:15
HashSet:采用哈希算法来实现Set接口。唯一性保证:重复对象equals方法返回为true  重复对象hashCode方法返回相同的整数 不同对象 哈希码 尽量保证不同(提高效率)
TreeSet:在元素添加的同时,进行排序。也要给出排序规则  唯一性保证:根据排序规则,compareTo方法返回为0,就可以认定两个对象中有一个是重复对象。
HashMap:轻量级  线程不安全  允许key或者value是null
TreeMap:集合是指一个对象可以容纳了多个对象(不是引用),这个集合对象主要用来管理维护一系列相似的对象。




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