Comparable和Comparetor
-
Comparable
一个实现了Comparable接口的对象的实例可以被用于相同对象的不同实例阶段。
![
Uploading J[ZUL2`OR8_747$XI0Y~DDC_897851.png . . .]
-
Comparator
一个实现了Comparator接口的对象能够对比不同对象。
降序排序
ZUL2`OR8_747$XI0Y~DDC.png
升序排序
![XYS$$%8N]](EY`076%DM%9B.png](https://img.haomeiwen.com/i2457754/ed021dccdd92d001.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
Set接口
- Set不保存重复的元素。Set中最常被使用的是测试归属性,可以很容易的询问某个对象是否在某个Set中。Set具有与Collection完全一样的接口,因此没有任何额外的功能。实际上Set就是Collection,只是行为不同。
实现了Set接口的主要有HashSet、TreeSet、LinkedHashSet这几个共同点就是每个相同的项只保存一份。他们也有不同点:
1.HashSet
HashSet使用的是相当复杂的方式来存储元素的,使用HashSet能够最快的获取集合中的元素,效率非常高(以空间换时间)。会根据hashcode和equals来判断是否是同一个对象,如果hashcode一样,并且equals返回true,则是同一个对象,不能重复存放。用hashCode()和equals()方法来区分同一对象后,就不能存放同一对象了。如果注释这两个方法,则所有对象视为不同对象,都可以存放。
HashSet的特点:
(1)不能保证元素的排列顺序,顺序有可能发生变化
(2)不是同步的
(3) 集合元素可以是null,但只能放入一个null
2.TreeSet
TreeSet也不能存放重复对象,但是TreeSet会自动排序,如果存放的对象不能排序则会报错,所以存放的对象必须指定排序规则。排序规则包括自然排序和客户排序。
自然排序:TreeSet要添加哪个对象就在哪个对象类上面实现java.lang.Comparable接口,并且重写comparaTo()方法,返回0则表示是同一个对象,否则为不同对象。
客户排序:建立一个第三方类并实现java.util.Comparator接口。并重写方法。定义集合形式为TreeSet ts = new TreeSet(new 第三方类());
3.LinkedHashSet
LinkedHashSet按照插入顺序保存对象,同时还保存了HashSet的查询速度。LinkedHashSet集合是根据元素的hashCode值来决定元素的存储位置,但是它同时使用链表维护元素的次序。这样使得元素看起 来像是以插入顺序保存的,也就是说,当遍历该集合时候,LinkedHashSet将会以元素的添加顺序访问集合的元素。
LinkedHashSet在迭代访问Set中的全部元素时,性能比HashSet好,但是插入时性能稍微逊色于HashSet。
网友评论