關鍵技術:
- HashSet采用散列函數對元素進行排序,是專門為快速查詢而設計的。存入HashSet的對象必須定義hashCode方法。
- TreeSet采用紅黑樹的數據結構進行排序元素,使用它可以從Set中提取有序(升序或者降序)的序列。需要注意的是,存入自定義類時,TreeSet需要維護元素的存儲順序,因此自定義類要實現Comparable接口并定義compareTo方法。
- LinkedHashSet內部使用散列以加快查詢速度,同時使用鏈表維護元素插入的次序,在使用迭代器遍歷Set時,結果會按元素插入的次序顯示。
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的每個元素必須是唯一的,因為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時,結果會按元素插入的次序顯示。
*/
}
}
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的每個元素必須是唯一的,因為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時,結果會按元素插入的次序顯示。
*/
}
}
-- 學海無涯