hashset 和 treeset

set是接口

hashset是实现了set接口的类,集合数据结构是哈希表,使用hashcode方法来确定位置,如果位置相同,通过元素的equals来确定是否相同

由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。

从类java.util.Set继承的方法有:equals  hashCode  removeAll

==============================================================================================================================

map是接口

TreeMap是实现map接口的类

如果要正确实现 Map 接口,则有序映射所保持的顺序(无论是否明确提供了比较器)都必须与 equals 一致(关于与 equals 一致 的精确定义,请参阅 ComparableComparator

Comparable接口:compareTo(t o)为其方法

Comparator接口:compare(t o1,t o2)   equale(object obj)为其方法

 =============================================================================================

treeset不考虑hashcode 和 equals,但由于treeset实现的是set接口,会给元素排序,且不允许元素重复,故treeset对元素实现排序方式之一:让元素实现compareable接口,覆盖compareTo方法(按照元素的默认方式进行排序)

如果不需要按照对象中具备的自然顺序进行排序。如果对象中不具备自然顺序(即导入的对象包不是自己定义的)这时可以使用treeset集合的第二种排序方式(让集合自身具备比较功能,在集合对象创建的时候就建立一个比较器):定义一个类实现comparetor接口,覆盖compare方法,将该类对象作为参数传递给treeset集合的构造函数(api文档构造方法摘要)。

注:元素实现compareable接口和集合比较器同时存在,使用的是集合比较器

原文地址:https://www.cnblogs.com/judylucky/p/3613999.html