java开技术SE进阶之Set接口分析

时间:2021-09-01 21:22:41   收藏:0   阅读:11

Set接口

Set的常用实现类有:HashSet、TreeSet、LinkedHashSet。

HashSet

1、概述

技术分享图片

底层也是数组,初始容量为16,当如果使用率超过0.75,(16*0.75=12)就会扩大容量为原来的2倍。(16扩容为32,依次为64,128….等)

结论:存放到Set集合中的元素一定要注意equals和hashcode方法的重写。

2、hashCode和equals方法

重写equals()方法的原则:

重写 hashCode() 方法的基本原则

LinkedHashSet

LinkedHashSet 是 HashSet 的子类

LinkedHashSet 根据元素的 hashCode 值来决定元素的存储位置,但它同时使用链表维护元素的次序,这使得元素看起来是以插入顺序保存的。

LinkedHashSet插入性能略低于 HashSet,但在迭代访问 Set 里的全部元素时有很好的性能。

LinkedHashSet 不允许集合元素重复。

技术分享图片

TreeSet

TreeSet 是 SortedSet 接口的实现类,TreeSet 可以确保集合元素处于排序状态。

TreeSet 两种排序方法:自然排序和定制排序。默认情况下,TreeSet 采用自然排序。

1、自然排序

TreeSet 会调用集合元素的 compareTo(Object obj) 方法来比较元素之间的大小关系,然后将集合元素按升序排列,如果试图把一个对象添加到 TreeSet 时,则该对象的类必须实现 Comparable 接口。实现 Comparable 的类必须实现 compareTo(Object obj) 方法,两个对象即通过 compareTo(Object obj) 方法的返回值来比较大小。

向 TreeSet 中添加元素时,只有第一个元素无须比较compareTo()方法,后面添加的所有元素都会调用compareTo()方法进行比较。

因为只有相同类的两个实例才会比较大小,所以向 TreeSet 中添加的应该是同一个类的对象

对于 TreeSet 集合而言,它判断两个对象是否相等的唯一标准是:两个对象通过 compareTo(Object obj) 方法比较返回值

当需要把一个对象放入 TreeSet 中,重写该对象对应的 equals() 方法时,应保证该方法与 compareTo(Object obj) 方法有一致的结果:如果两个对象通过 equals() 方法比较返回 true,则通过 compareTo(Object obj) 方法比较应返回 0。否则让人难以理解。

Comparable 的典型实现:

技术分享图片

2、定制排序

3、结论

了解java培训开发技术知识,关注我,有更多精彩内容与您分享!

文章转载链接:http://www.atguigu.com/jsfx/12353.html

原文:https://www.cnblogs.com/xiaobaizaixianzhong/p/15213407.html

评论(0)
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!