- Set 接口是Collection 的子接口,Set 接口没有提供新增的方法。实现Set 接口的容器类中的元素是没有顺序的,并且元素不可以重复。在Java API 中提供的实现Set 接口的容器类有HashSet、TreeSet 等,它们是无序的容器类。
- HashSet 类
HashSet 类实现了Set 接口,不允许出现重复元素,不保证集合中元素的顺序,允许包含值为null 的元素,但最多只能有一个。HashSet 添加一个元素时,会调用元素的hashCode()方法,获得其哈希码,根据这个哈希码计算该元素在集合中的存储位置。HashSet 使用哈希算法存储集合中的元素,可以提高集合元素的存储速度。
HashSet 类的常用构造方法有3 种重载形式,具体如下:
(1)构造一个新的空Set 集合。
public HashSet()
(2)构造一个包含指定集合中的元素的新Set 集合。
public HashSet(Collection c)
(3)构造一个新的空Set 集合,指定初始容量。
public HashSet(int initialCapacity)
代码如下:
package test;
import java.util.HashSet;
import java.util.Iterator;
public class HashSetTest {
public static void main(String[] args) {
HashSet hash = new HashSet();
hash.add("56");
hash.add("32");
hash.add("50");
hash.add("48");
hash.add("48");
hash.add("23");
System.out.println("集合元素个数:" + hash.size());
Iterator i = hash.iterator();
while(i.hasNext()){
System.out.print(i.next()+" ");
}
}
}
运行结果:
集合元素个数:5
56 23 48 50 32
- TreeSet类
TreeSet 类不仅继承了Set 接口,还继承了SortedSet 接口,它不允许出现重复元素。由于SortedSet 接口可以对集合中的元素进行自然排序(即升序排序),因此TreeSet 类会对实现了Comparable 接口的类的对象自动排序。
代码如下:
package test;
import java.util.TreeSet;
import java.util.Iterator;
import java.util.SortedSet;
public class TreeSetTest {
public static void main(String[] args) {
TreeSet tree = new TreeSet();
tree.add("45");
tree.add("32");
tree.add("68");
tree.add("12");
tree.add("20");
tree.add("80");
tree.add("75");
System.out.println("集合元素个数:" + tree.size());
System.out.println("---集合中的元素---");
Iterator i = tree.iterator();
while(i.hasNext()){
System.out.print(i.next()+" ");
}
System.out.println();
System.out.println("集合中20~68的元素");
SortedSet s = tree.subSet("20", "68");
i = s.iterator();
while(i.hasNext()){
System.out.print(i.next()+" ");
}
System.out.println();
System.out.println("集合中45之前的元素");
SortedSet s1 = tree.headSet("45");//不包括45
i = s1.iterator();
while(i.hasNext()){
System.out.print(i.next()+" ");
}
System.out.println();
System.out.println("集合中第一个元素"+tree.first());
System.out.println("集合中最后一个元素"+tree.last());
System.out.println("获取并移除集合中第一个元素"+tree.pollFirst());
System.out.println("获取并移除集合中最后一个元素"+tree.pollLast());
System.out.println("集合中的元素");
i = tree.iterator();
while (i.hasNext()) {
System.out.print(i.next() + " ");
}
System.out.println();
}
}
运行结果:
集合元素个数:7
—集合中的元素—
12 20 32 45 68 75 80
集合中20~68的元素
20 32 45
集合中45之前的元素
12 20 32
集合中第一个元素12
集合中最后一个元素80
获取并移除集合中第一个元素12
获取并移除集合中最后一个元素80
集合中的元素
20 32 45 68 75