黑马程序员技术交流社区
标题:
学习集合的疑惑
[打印本页]
作者:
纷飞尽
时间:
2013-12-10 00:34
标题:
学习集合的疑惑
谁能帮忙解释下 HashSet和TreeSet:的区别啊?在什么时候用啊?老搞不清楚什么时候用什么比较器?
作者:
§傻、才乖
时间:
2013-12-10 00:57
HashSet集合底层数据结构用的是hash表,集合中的元素是无序的。
如果类的对象要放到HashSet集合中,就要覆写HashCode方法和equals方法,这样就保证了元素的唯一性
TreeSet集合底层数据结构是二叉树,集合中的元素是有序的。
这个集合中的元素必须有比较性,就是对象所属的类中实现了Comparable接口,覆写了compareTo方法
或者自定义比较器实现了Comparator接口,实现了compare方法
那么什么时候用比较器呢
当类没有比较性,或者有一种比较性,但是我们想让他有别的比较方式,那么,我们可以用比较器的方式
而不用重新去写这个类,实现自己想用的比较方式
比较器的出现大大提高了,比较性和类之间的灵活性
作者:
史超
时间:
2013-12-10 09:04
HashSet与TreeSet区别:1、TreeSet 是二差树实现的,Treeset中的数据是自动排好序的,不允许放入null值2、HashSet 是哈希表实现的,HashSet中的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复,就如数据库中唯一约束3、HashSet要求放入的对象必须实现HashCode()方法,放入的对象,是以hashcode码作为标识的,而具有相同内容的 String对象,hashcode是一样,所以放入的内容不能重复。但是同一个类的对象可以放入不同的实例
作者:
末末
时间:
2013-12-10 10:33
HashSet:底层是哈希表结构,不能有重复的元素,判断重复的依据是,hashCode,equals方法,先判断hashCode如果相等,才会去比较equals,返回的是boolean型
TreeSet:底层是二叉树结构,不能有重复的元素,排序有两种方式,一种是让元素具备比较性,实现comparable中的comparto,返回类型是int 0 1 -1(0,正数,负数),第二种方式是让集合本身具备比较性,写一个类实现comparator中的compare方法,返回int 0 1 -1(0,正数,负数)
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2