HashSet<E>泛型类

来源:互联网 发布:苹果数据线头接法 编辑:程序博客网 时间:2024/05/08 20:46

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>接口变量,那么接口就可以调用实现的接口方法。

 

 

 

 

 

 

0 0
原创粉丝点击