1. 程式人生 > >Java Set( 不允許重複的集合)

Java Set( 不允許重複的集合)

HashSet:  防止重複 使用HashSet的class必須implements Comparable();
ArrayList<class> classList=new ArrayList<class>();
HashSet<class> classSet=new HashSet<class>();
classSet.addAll(classList);     //addAll()可以複製其他集合的元素,效果就跟一個一個加進去一樣


但是僅僅這樣做的話還是會有重複;
HashSet如何檢查重複? :hashCode()和equals():     //相同的物件必須hashCode()相同並且equals()返回true,但hashCode()相同的物件不一定相同。 必須覆蓋hashCode()和equals():   hashCode()的預設行為是對在heap上的物件產生獨特的值,如果沒有override過hashCode(),則該class的兩個物件怎樣都不會被認為是相同的。
class class implements Comparable<class>{
String title;
public boolean equals (Object a){
     class s=(class)a;
     return title.equals(a.getTitle());
}
public int hashCode(){
return title.hashCode();
}
}



TreeSet:防止重複並保持有序 TreeSet<Class> classSet=new TreeSet<Class>();  //呼叫沒有引數的建構函式來用TreeSet取代HashSet意味著以物件的compareTo()方法來進行排序 classSet.addAll(classList); 要使用TreeSet,下列一項必須為真: *集合中的元素必須是有實現Comparable的型別,並覆蓋了compareTo(Object o)方法。例如:
class Book implements Comparable{
String title;
public int compareTo(Object b)
{Book book=(Book)b;  return title.compareTo(book.title);}}


或*使用過載、取用Comparator引數的建構函式來建立TreeSet。例如:
class BookCompare implements  Comparator<Book>{
public int compare(Book one,Booke two)
{return one.title.compareTo(two.title);}}
class Test{
BookCompare bCompare=new BookCompare();
TreeSet<Book> tree=new TreeSet<Book>(bCompare);}