规则集是用于存储一组不重复的元素的集合。规则集Set接口是对Collection接口的一种扩充,它没有引入新的方法和变量,只是规定了Set的实例不包含重复的元素。
Set接口有3个具体的实现类:散列类HashSet,链式散列类LinkedHashSet和树形类TreeSet。
散列集HashSet
HashSet类是一个用于实现Set接口的具体类,它可以使用无参构造方法创建,也可以由一个现有的集合创建散列集。
客座率:是在测量在增加规则集的容量之前,该规则集的饱满程度。当元素数量超过了规则集的饱满程度,容量就会翻倍。默认为容量16,客座率0.75.
考虑到效率问题,添加到散列集中的对象必须以一种正确的分散散列码的方式实现HashCode方法。
HashCode:Object类中定义的一种方法,作用是对集合中象间的比较提高效率,它通过一种特俗的函数运算,将集合中的对象映射到一组数值上,相同的对象一定有相同的Code值,不同的对象可能有相同的散列码,我们在用方法进行比较。以此提高效率。
public class TestHashSet {
//create a hash set
public static void main(String[] args){
Set s = new HashSet();
//Add Strings to the set
s.add("London");
s.add("Paris");
s.add("New York");
s.add("London");
System.out.println(s);
//迭代器
// Iterator inIterator = s.iterator();
// while(inIterator.hasNext()){
// System.out.println(inIterator.next().toUpperCase()+" ");
// }
for(Object element:s){
System.out.println(element);
}
}
}
这个程序中添加了两次London,但只要一个会被存储。因为规则集中不允许有重复的元素。HashSet是没有顺序的。
for-each循环可用于Collection的任何实例上。
链式散列表LinkedHashSet
它扩展了HashSet,支持对规则集的元素进行排序,它可以按照插入规则集的顺序提取。
如果不需要维护元素被插入的顺序,应使用HashSet。
树形TreeSet
SortedSet是set的一个子接口,它可以确保规则集中的元素是有序的,它提供了两个方法first()和last()来返回第一个和最后一个元素,以及方法headSet(t)和tailSet(f)以返回小于t和大于或等于f的那一部分。
NavigableSet扩展了SortedSet,它又提供了导航方式而TreeSet