[plain] view plaincopyprint?java
關鍵技術: 數據結構
HashSet採用散列函數對元素進行排序,是專門爲快速查詢而設計的。存入HashSet的對象必須定義hashCode方法。 函數
TreeSet採用紅黑樹的數據結構進行排序元素,使用它能夠從Set中提取有序(升序或者降序)的序列。須要注意的是,存入自定義類時,TreeSet須要維護元素的存儲順序,所以自定義類要實現Comparable接口並定義compareTo方法。 spa
LinkedHashSet內部使用散列以加快查詢速度,同時使用鏈表維護元素插入的次序,在使用迭代器遍歷Set時,結果會按元素插入的次序顯示。 .net
[java] view plaincopyprint?設計
package book.arrayset; 對象
import java.util.ArrayList; blog
import java.util.HashSet; 排序
import java.util.Iterator; 接口
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
/**
* 演示各類Set的使用
* 存入Set的每一個元素必須是惟一的,由於Set不保存重複元素。
*/
public class TestSet {
/**
* 初始化Set的元素
* @param set
*/
public static void init(Set set){
if (set != null){
set.add("aaa");
set.add("ccc");
set.add("bbb");
set.add("eee");
set.add("ddd");
}
}
/**
* 輸出set的元素
* @param set
*/
public static void output(Set set){
if (set != null){
//使用迭代器遍歷Set,也只有這一種方法
Iterator it = set.iterator();
while (it.hasNext()){
System.out.print(it.next() + " ");
}
}
System.out.println();
}
/**
* 使用HashSet
*/
public static void testHashSet(){
Set mySet = new HashSet();
init(mySet);
System.out.println("使用HashSet: ");
output(mySet);
}
/**
* 使用TreeSet
*/
public static void testTreeSet(){
Set mySet = new TreeSet();
init(mySet);
System.out.println("使用TreeSet: ");
output(mySet);
}
/**
* 使用LinkedHashSet
*/
public static void testLinkedHashSet(){
Set mySet = new LinkedHashSet();
init(mySet);
System.out.println("使用LinkedHashSet: ");
output(mySet);
}
public static void main(String[] args) {
TestSet.testHashSet();
TestSet.testTreeSet();
TestSet.testLinkedHashSet();
Set mySet = new HashSet();
init(mySet);
//Set不容許元素重複
mySet.add("aaa");
mySet.add("bbb");
System.out.println("爲mySet加入aaa, bbb元素後: ");
output(mySet);
//刪除元素
mySet.remove("aaa");
System.out.println("mySet刪除aaa元素後: ");
output(mySet);
//增長另一個集合中的全部元素
List list = new ArrayList();
list.add("aaa");
list.add("aaa");
list.add("fff");
mySet.addAll(list);
System.out.println("mySet添加另一個集合的全部元素後: ");
output(mySet);
//刪除除了另一個集合包含的之外的全部元素
mySet.retainAll(list);
System.out.println("mySet刪除除了另一個集合包含的之外的全部元素後: ");
output(mySet);
//刪除另一個集合包含的全部元素
mySet.removeAll(list);
System.out.println("mySet刪除另一個集合包含的全部元素後: ");
output(mySet);
//獲取Set中元素的個數
System.out.println("mySet中當前元素的個數: " + mySet.size());
//判斷Set中元素個數是否爲0
System.out.println("mySet中當前元素爲0? " + mySet.isEmpty());
/**
* (1)Set不容許重複元素,所以加入Set的Object必須定義equals()方法以確保對象的惟一性。
* (2)HashSet採用散列函數對元素進行排序,是專門爲快速查詢而設計的。存入HashSet的對象必須定義hashCode()。
* (3)TreeSet採用紅黑樹的數據結構進行排序元素,能保證元素的次序,使用它能夠從Set中提取有序的序列。
* 須要注意的是,生成本身的類時,Set須要維護元素的存儲順序,所以要實現Comparable接口並定義compareTo()方法。
* (4)LinkedHashSet內部使用散列以加快查詢速度,同時使用鏈表維護元素的插入的次序,在使用迭代器遍歷Set時,結果會按元素插入的次序顯示。
*/
}
}