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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 纷飞尽 中级黑马   /  2013-12-10 00:34  /  1160 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

谁能帮忙解释下 HashSet和TreeSet:的区别啊?在什么时候用啊?老搞不清楚什么时候用什么比较器?

3 个回复

倒序浏览
HashSet集合底层数据结构用的是hash表,集合中的元素是无序的。
如果类的对象要放到HashSet集合中,就要覆写HashCode方法和equals方法,这样就保证了元素的唯一性

TreeSet集合底层数据结构是二叉树,集合中的元素是有序的。
这个集合中的元素必须有比较性,就是对象所属的类中实现了Comparable接口,覆写了compareTo方法
或者自定义比较器实现了Comparator接口,实现了compare方法

那么什么时候用比较器呢
当类没有比较性,或者有一种比较性,但是我们想让他有别的比较方式,那么,我们可以用比较器的方式
而不用重新去写这个类,实现自己想用的比较方式
比较器的出现大大提高了,比较性和类之间的灵活性

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
HashSet与TreeSet区别:1、TreeSet 是二差树实现的,Treeset中的数据是自动排好序的,不允许放入null值2、HashSet 是哈希表实现的,HashSet中的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复,就如数据库中唯一约束3、HashSet要求放入的对象必须实现HashCode()方法,放入的对象,是以hashcode码作为标识的,而具有相同内容的 String对象,hashcode是一样,所以放入的内容不能重复。但是同一个类的对象可以放入不同的实例

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
    HashSet:底层是哈希表结构,不能有重复的元素,判断重复的依据是,hashCode,equals方法,先判断hashCode如果相等,才会去比较equals,返回的是boolean型
      TreeSet:底层是二叉树结构,不能有重复的元素,排序有两种方式,一种是让元素具备比较性,实现comparable中的comparto,返回类型是int 0 1 -1(0,正数,负数),第二种方式是让集合本身具备比较性,写一个类实现comparator中的compare方法,返回int 0 1 -1(0,正数,负数)

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马