Posted on 2009-05-31 00:03
啥都寫點(diǎn) 閱讀(1688)
評(píng)論(0) 編輯 收藏 所屬分類:
J2SE
關(guān)鍵技術(shù):
- HashSet采用散列函數(shù)對(duì)元素進(jìn)行排序,是專門為快速查詢而設(shè)計(jì)的。存入HashSet的對(duì)象必須定義hashCode方法。
- TreeSet采用紅黑樹(shù)的數(shù)據(jù)結(jié)構(gòu)進(jìn)行排序元素,使用它可以從Set中提取有序(升序或者降序)的序列。需要注意的是,存入自定義類時(shí),TreeSet需要維護(hù)元素的存儲(chǔ)順序,因此自定義類要實(shí)現(xiàn)Comparable接口并定義compareTo方法。
- LinkedHashSet內(nèi)部使用散列以加快查詢速度,同時(shí)使用鏈表維護(hù)元素插入的次序,在使用迭代器遍歷Set時(shí),結(jié)果會(huì)按元素插入的次序顯示。
package book.arrayset;
import java.util.ArrayList;
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的每個(gè)元素必須是唯一的,因?yàn)镾et不保存重復(fù)元素。
*/
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不允許元素重復(fù)
mySet.add("aaa");
mySet.add("bbb");
System.out.println("為mySet加入aaa, bbb元素后: ");
output(mySet);
//刪除元素
mySet.remove("aaa");
System.out.println("mySet刪除aaa元素后: ");
output(mySet);
//增加另外一個(gè)集合中的所有元素
List list = new ArrayList();
list.add("aaa");
list.add("aaa");
list.add("fff");
mySet.addAll(list);
System.out.println("mySet添加另外一個(gè)集合的所有元素后: ");
output(mySet);
//刪除除了另外一個(gè)集合包含的以外的所有元素
mySet.retainAll(list);
System.out.println("mySet刪除除了另外一個(gè)集合包含的以外的所有元素后: ");
output(mySet);
//刪除另外一個(gè)集合包含的所有元素
mySet.removeAll(list);
System.out.println("mySet刪除另外一個(gè)集合包含的所有元素后: ");
output(mySet);
//獲取Set中元素的個(gè)數(shù)
System.out.println("mySet中當(dāng)前元素的個(gè)數(shù): " + mySet.size());
//判斷Set中元素個(gè)數(shù)是否為0
System.out.println("mySet中當(dāng)前元素為0? " + mySet.isEmpty());
/**
* (1)Set不允許重復(fù)元素,因此加入Set的Object必須定義equals()方法以確保對(duì)象的唯一性。
* (2)HashSet采用散列函數(shù)對(duì)元素進(jìn)行排序,是專門為快速查詢而設(shè)計(jì)的。存入HashSet的對(duì)象必須定義hashCode()。
* (3)TreeSet采用紅黑樹(shù)的數(shù)據(jù)結(jié)構(gòu)進(jìn)行排序元素,能保證元素的次序,使用它可以從Set中提取有序的序列。
* 需要注意的是,生成自己的類時(shí),Set需要維護(hù)元素的存儲(chǔ)順序,因此要實(shí)現(xiàn)Comparable接口并定義compareTo()方法。
* (4)LinkedHashSet內(nèi)部使用散列以加快查詢速度,同時(shí)使用鏈表維護(hù)元素的插入的次序,在使用迭代器遍歷Set時(shí),結(jié)果會(huì)按元素插入的次序顯示。
*/
}
}
--
學(xué)海無(wú)涯