HashSet泛型類

HashSet<E>泛型類在數據組織上類似於數學上的集合,可以進行“交”、“並”、“差”等運算。

1、HashSet<E>對象

HashSet<E>泛型類創建的對象稱爲集合,如:

HashSet<String> set = HashSet<String>;


那麼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()方法遍歷集合。

 

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);
		}
	}
}

 

程序輸出結果如下:
集合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。

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());
		}
	}
}


程序輸出結果如下:

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>接口變量,那麼接口就可以調用實現的接口方法。

 

 

☞   溫馨提示:   返回我的博客索引

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章