简单点说,首先大概念Set集合,它里面的元素不能重复而且集合没有索引,HashSet底层的数据结构是哈希表,在把自定义对象存入HashSet的时候,会比较自定义对象的哈希值,根据哈希值的不同去判断对象(重写hashCode()方法),如果有2个对象的哈希值相同那么,在利用重写的equals()方法比较自定义对象是否一样,这样可以保证HashSet里的元素的唯一性。
而对于TreeSet方法,它的底层数据结构是二叉树,如果你学过数据结构会比较好理解,如果没有学过,你可以简单的这样理解:2个自定义对象比较(比较内容自定),当前元素和集合里的每一个元素比较,如果比当前比较的对象小,向左边枝叶走,如果大向右边枝叶走,最后总有一个合适它的地方,在编写程序的时候,有2中方法,一种就是你说的自定义对象实现Comparable接口重写里面的compareTo(Object obj)方法,还有一种就是写一个比较器的类,该类实现Comparator接口重写compare(object o1,Object o2)方法,但是无论你使用哪一种方法,TreeSet集合最后根据的是你返回值来判断比较大小的,正数大,0为相等,负数小。
另外你提到的共用方法和属性,你打开API文档,看一下Set接口的通用方法,和util包中我们使用到的接口,有哪些类实现了他们,这样思路就清楚了。 |