Set集合
开发工具与关键技术:
作者:梁峻豪
撰写时间:2021.6.8
Set集合类似于一个罐子,程序可以依次把多个对象”丢进”Set集合,而Set集合通常不能记住元素的添加顺序。
Set集合中的对象不按特定的方式排序,只是简单的把对象加入集合。
Set集合中不能包含重复的对象,并且最多只允许包含一个null元素。
Set集合是一个接口,它继承Collection的接口,它有两个常用的实现类:HashSet类和TreeSet类
HashSet类
heshSet是Set接口的典型实现,大多数时候使用Set集合时就是使用这个实现类。
hashSet是按照Hash算法来存储集合中的元素。因此具有很好的存取和查找性能。
hashSet具有以下特点:
不能保证元素的排列顺序,顺序可能与添加顺序不同,顺序也有可能发生变化。HshSet不是同步的,如果多个线程同时访问或修改一个HashSet,则必须通过代码来保证其同步。集合元素值可以是null。
当向HashSet集合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据该hashCode值决定该对象在HashSet中的存储位置。
两个对象的hashCode值相等且通过equals()方法比较返回结果为true,则HashSet集合认为两个元素相等。
在HashSet():构造一个新的空的Set集合。
HashSet(Collection<?extends E>c):
构造一个包含指定Collection集合元素的新Set集合。其中,“<>”中的extends表示HashSet表示HashSet的父类,即指明该Set集合中存放的集合元素类型。
C表示其中的元素将被存放在此Set集合中。
下面代码演示了创建两种不同形式的HashSet对象。
HashSet hs = new HashSet();//调用无参的构造函数创建HashSet对象
HashSethss = new HashSet();//创建泛型的Hash集合对象
例:
编写一个Java程序,使用HashSet创建一个Set集合,并向该集合中添加4个元素.
具体实现代码如下:
如上诉代码,首先使用HashSet类的构造方法创建了一个Set集合,接着创建了4个String类型的对象.并将这些对象存储到Set集合中.使用HashSet类中的iterator()方法获取一个lterator对象,并调用其hashNext()方法遍历集合元素,再将使用next()方法读取的元素强制转换为String类型.最后调用HashSet类中的size()方法获取集合元素个数.
注意:在以上示例中,如果再向 CourseSet 集合中再添加一个名称为“Java 入门教程”的
String 对象,则输出的结果与上述执行结果相同。
也就是说,如果向 Set 集合中添加两个相同的元素,则后添加的会覆盖前面添加的元素,
即在 Set 集合中不会出现相同的元素。
TreeSet类
TreeSet 类同时实现了 Set 接口和 SortedSet 接口。
SortedSet 接口是 Set 接口的子接口,可以实现对集合进行自然排序,因此使用 TreeSet 类
实现的 Set 接口默认情况下是自然排序的,这里的自然排序指的是升序排序。
TreeSet 只能对实现了 Comparable 接口的类对象进行排序,因为 Comparable 接口中有一个
compareTo(Object o) 方法用于比较两个对象的大小。
下表列举了 JDK 类库中实现 Comparable 接口的类,以及这些类对象的比较方式。