标签:
HashSet<E>泛型类在数据组织上类似于数学上的集合,可以进行“交”、“并”、“差”等运算。
1、HashSet<E>对象
HashSet<E>泛型类创建的对象称为集合,如:
<span style="font-family:Microsoft YaHei;font-size:14px;">HashSet<String> set = HashSet<String>; </span>
那么set就是一个可以存储 string 类型数据的集合,set 可以调用 add(String s) 方法将 string 类型的数据添加到集合中。添加到集合中的数据称为集合的元素。集合不允许有相同的元素,也就是说,如果b已经是集合中的元素,那么在执行 set.add(b)操作是无效的。集合对象的初始容量是16字节装载因子是0.75。也就是说,如果集合添加的元素超过总容量的75%时,集合的容量将增加1倍。
2、常用方法
HashSet<E>泛型类的常用方法如下:
① public boolean add(E o) —— 向集合添加参数指定的元素。
② public void clear() ——清空集合,使集合不含有任何元素。
③ public boolean contains(Object o) —— 判断参数指定的数据是否属于集合。
④ public boolean isEmpty() —— 判断集合是否为空。
⑤ public boolean remove(Object o) ——集合删除参数指定的元素。
⑥ public int size () —— 返回集合中元素的个数。
⑦ Object [ ] toArray() —— 将集合元素存放到数组中,并返回这个数组。
⑧ boolean containsAll (HashSet set) —— 判断当前集合是否包含参数指定的集合。
⑨ public Object clone () —— 得到当前集合的一个克隆对象,该对象中元素的改变不会影响到当前集合中的元素,反之亦然。、
我们可以借助泛型类Iterator<E>实现遍历集合,一个集合对象可以使用iterator() 方法返回一个Iterator<E>类型的对象,如果集合是“Student类型”的集合,即集合中的元素是Student类创建的对象,那么该集合使用iterator() 方法放回一个Iterator<Student>类型的对象,该对象使用next()方法遍历集合。
<span style="font-family:Microsoft YaHei;font-size:14px;"><span style="font-family:Microsoft YaHei;font-size:14px;">package com.chindroid.date; import java.util.HashSet; import java.util.Iterator; class Student{ String name; int score; Student(String name, int score){ this.name = name; this.score = score; } } public class TestHashSet { public static void main(String[] args) { Student zh = new Student("张红铭",77); Student wa = new Student("王家家",68); Student li = new Student("李佳佳",67); HashSet<Student> set = new HashSet<Student>(); HashSet<Student> subset = new HashSet<Student>(); set.add(zh); set.add(wa); set.add(li); subset.add(wa); subset.add(li); if (set.contains(wa)){ System.out.println("集合set中含有:"+wa.name); } if(set.containsAll(subset)){ System.out.println("集合set包含集合subset"); } int number = subset.size(); System.out.println("集合subset中有"+number+"个元素:"); Object s[] = subset.toArray(); for(int i=0; i<s.length; i++){ System.out.printf("姓名:%s,分数:%d\n", ((Student)s[i]).name,((Student)s[i]).score); } number = set.size(); System.out.println("集合set中有"+"个元素:"); Iterator<Student> iter = set.iterator(); while(iter.hasNext()){ Student te = iter.next(); System.out.printf("姓名:%s, 分数:%d\n", te.name,te.score); } } } </span></span>
程序输出结果如下:
集合set中含有:王家家
集合set包含集合subset
集合subset中有2个元素:
姓名:王家家,分数:68
姓名:李佳佳,分数:67
集合set中有个元素:
姓名:王家家, 分数:68
姓名:张红铭, 分数:77
姓名:李佳佳, 分数:67
3、集合的交、并与差
集合对象调用boolean addAll(HashSet set) 方法可以与参数指定的集合求并运算,使得当前集合成为两个集合的并。
集合对象调用boolean retainAll(HashSet set )方法可以与参数指定的集合求交运算,使得当前集合成为两个集合的交。
集合对象调用boolean removeAll (HashSet set ) 方法可以与参数指定的集合求差运算,使得当前集合成为两个集合的差。
参数指定的集合必须与当前集合是同种类型的集合,否则上述方法返回false。
<span style="font-family:Microsoft YaHei;font-size:14px;"><span style="font-family:Microsoft YaHei;font-size:14px;">package com.chindroid.date; import java.util.HashSet; import java.util.Iterator; public class TestHashset2 { public static void main(String[] args) { Integer one = new Integer(1); Integer two = new Integer(2); Integer three = new Integer(3); Integer four = new Integer(4); Integer five = new Integer(5); Integer six = new Integer(6); HashSet<Integer> A = new HashSet<Integer>(); HashSet<Integer> B = new HashSet<Integer>(); HashSet<Integer> tempSet = new HashSet<Integer>(); A.add(one); A.add(two); A.add(three); A.add(four); B.add(one); B.add(two); B.add(five); B.add(six); tempSet = (HashSet<Integer>)A.clone(); A.removeAll(B); B.removeAll(tempSet); B.addAll(A); int number = B.size(); System.out.println("A和B的对称差集合有" + number + "个元素:"); Iterator<Integer> iter = B.iterator(); while (iter.hasNext()){ Integer te = iter.next(); System.out.printf("%d,",te.intValue()); } } } </span></span>
程序输出结果如下:
A和B的对称差集合有4个元素:
3,4,5,6,
4、HashSet<E>泛型类实现的接口
HashSet<E>泛型类实现了泛型接口Set<E>,而Set<E>接口是Collection<E>接口的子接口。HashSet<E>类中的绝大部分方法都是接口方法的实现。编程时,可以使用接口回调技术,即把HashSet<E>对象的引用赋值给Collection<E>接口变量或Set<E>接口变量,那么接口就可以调用实现的接口方法。
标签:
原文地址:http://blog.csdn.net/qiaqia609/article/details/43018429