Java-set实现类性能对比

  • 内容
  • 评论
  • 相关

Set接口的实现类:

共同的特点:

1):都不允许元素重复.

2):都不是线程安全的类.

解决方案:Set s = Collections.synchronizedSet(Set对象);

-----------------------------------------------------------------------------------------

HashSet: 不保证元素的先后添加顺序.

底层才有的是哈希表算法,查询效率极高.

判断两个对象是否相等的规则:

1):equals比较为true.

2):hashCode值相同.

要求:要求存在在哈希中的对象元素都得覆盖equals和hashCode方法.

LinkedHashSet:

HashSet的子类,底层也采用的是哈希表算法,但是也使用了链表算法来维持元素的先后添加顺序.

判断两个对象是否相等的规则和HashSet相同.

因为需要多使用一个链表俩记录元素的顺序,所以性能相对于HashSet较低.

一般少用, 如果要求一个集合既要保证元素不重复,也需要记录添加先后顺序,才选择使用LinkedHashSet.

TreeSet:不保证元素的先后添加顺序,但是会对集合中的元素做排序操作.

底层才有红黑树算法(树结构,比较擅长做范围查询).

              TreeSet要么才有自然排序,要么定制排序.

自然排序:  要求在TreeSet集合中的对象必须实现java.lang.Comparable接口,并覆盖compareTo方法.

 定制排序:  要求在构建TreeSet对象的时候,传入一个比较器对象(必须实现java.lang.Comparator接口).

在比较器中覆盖compare方法,并编写比较规则.

                 TreeSet判断元素对象重复的规则:

compareTo/compare方法是否返回0.如果返回0,则视为是同一个对象.

-----------------------------------------------------------------------------

HashSet做等值查询效率高,TreeSet做范围查询效率高.

而我们更多的情况,都是做等值查询, 在数据库的索引中做范围查询较多,所以数结构主要用于做索引,用来提高查询效率.

评论

0条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注