<b>功能:</b>
一個容器,一個“大筐”
<b>知識摘要:</b>
Set不允許存在重複資料,判斷重複标準:equals方法
HashSet:hashCode值決定它在HashSet中的位置
LinkedHashSet:HashSet子類,以連結清單的方式維護元素的次序
TreeSet:SortedSet接口的實作類,它保持了排序狀态
EnumSet:性能相對不錯的 枚舉Set(本例未涉及相關内容,有興趣可以自己檢視相關API)
HashSet、TreeSet、EnumSet都是線程不安全的
如果需要線程安全使用:
Set s = Collections.synchronizedSet(new HashSet(...));
<b>程式示範: 放大</b>
package com.cxy.collection;
import java.util.Comparator;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.TreeSet;
/**
* @author cxy @ www.cxyapi.com
*/
public class SetTest
{
public static void main(String[] args)
{
Set s = new HashSet();
s.add(null);
s.add(new A());
//由于2個A對象的hashCode傳回的都是1,并且equals方法傳回的是true,是以這兩個對象隻能存在1個
s.add(new B());
//B對象的equals方法傳回的永遠是false,是以這兩個B對象都能留下
s.add(new C());
//2個C對象hashCode傳回的都是2,并且equals方法傳回的是true,并且hashCode沒有和以往對象相等的,是以留住1個C對象
System.out.println(s); //通過列印結果可以看出 HashSet無序性。
LinkedHashSet<String> lhs = new LinkedHashSet<String>();
lhs.add("world");
lhs.add("said");
lhs.add("hello");
System.out.println(lhs); //按照加入順序列印
TreeSet ts=new TreeSet();
ts.add(100);
ts.add(64);
ts.add(-100);
ts.add(0);
System.out.println(ts); //發現列印出來的已然是有序狀态
System.out.println("第一個:"+ts.first());
System.out.println("最後一個:"+ts.last());
System.out.println("小于64的最大元素(64前面的):"+ts.lower(64));
System.out.println("大于0的最小元素(0後面的):"+ts.higher(0));
System.out.println("0~100之間的:"+ts.subSet(0, 100)); //半閉半開區間
System.out.println("小于64的集合"+ts.headSet(64));
System.out.println("大于或者等于0的集合"+ts.tailSet(0));
try
{
TreeSet errorSet=new TreeSet();
errorSet.add(new error());
}catch(Exception e)
System.out.println("由于error類沒有實作Comparable接口的compareTo方法,是以這裡出現類型轉換的異常");
}
TreeSet errorSet1=new TreeSet();
errorSet1.add(123);
errorSet1.add("asd");
System.out.println("不同類執行個體的比較 會出類轉換異常");
//一個定制排序的set
TreeSet myStyleSet=new TreeSet(new Comparator()
@Override
public int compare(Object o1, Object o2)
{
return 0; //一個永遠平等的集合~ 你懂的~
}
});
}
}
class A
@Override
public int hashCode()
return 1;
public boolean equals(Object obj)
return true;
class B
return false;
class C
return 2;
//一個沒有實作比較的類
class error
}