Set接口及常用子类
java.util.Set 接口和 java.util.List 接口一样,同样继承自 Collection 接口,它与 Collection 接口中的方法基本一致,并没有对 Collection 接口进行功能上的扩充,只是比 Collection 接口更加严格了。与 List 接口不同的是,Set接口中元素无序,并且都会以某种规则保证存入的元素不出现重复。
Set的常用方法
变量和类型方法描述
booleanadd(E e)如果指定的元素尚不存在,则将其添加到此集合,重复的值会被覆盖voidclear()从该集合中删除所有元素booleancontains(Object o)如果该集合包含指定的元素,则返回 truebooleanequals(Object o)将指定对象与此集合进行相等性比较,相等则返回truebooleanremove(Object o)如果指定的元素存在,则从该集合中移除该元素intsize()返回此集合中的元素数(长度)booleanisEmpty()如果此集合不包含任何元素,则返回 trueObject[]toArray()返回包含此set中所有元素的数组(即把集合转换为数组)
(由于Set没有get方法,因此Set集合取出元素的方式可以采用:迭代器或forEach)
HashSet集合
java.util.HashSet 是 Set 接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的(即存取顺序不一致)。HashSet 是根据对象的哈希值来确定元素在集合中的存储位置,因此具有良好的存取和查找性能,底层数据结构是 HashMap 。HashSet 保证元素唯一性的方式依赖于:hashCode 与 equals 方法。
public class HashSetDemo { public static void main(String
[] args
) {
HashSet
<String> set
= new HashSet<String>();
set
.add(new String("123"));
set
.add("123");
set
.add("123");
set
.add("321");
for (String name
: set
) {
System
.out
.println(name
);
}
}
打印结果为:
123
321
说明Set集合中不能存储重复元素,旧的元素会被覆盖。
HashSet集合存储数据的结构(哈希表)
TreeSet
TreeSet是一个有序的集合,它的作用是提供有序的Set集合。TreeSet是基于TreeMap实现的,支持2种排序方式:自然排序或者根据提供的 Comparator 进行排序。TreeSet的迭代器是快速失败的。即当正在迭代的集合被修改时,运行出错。当集合要存储自定义类时,自定义类需要实现 Comparable 接口,并重写 comparaTo() 方法。
public static void main(String
[] args
) {
TreeSet
<String> treeset
= new TreeSet<>();
treeset
.add("B");
treeset
.add("D");
treeset
.add("C");
treeset
.add("A");
for(String s
:treeset
) {
System
.out
.println(s
);
}
}
HashSet 与 TreeSet 的常用方法基本与 Set 相同。