Java Set( 不允許重複的集合)
阿新 • • 發佈:2018-11-14
HashSet: 防止重複
使用HashSet的class必須implements Comparable();
但是僅僅這樣做的話還是會有重複;
HashSet如何檢查重複?
:hashCode()和equals(): //相同的物件必須hashCode()相同並且equals()返回true,但hashCode()相同的物件不一定相同。
必須覆蓋hashCode()和equals(): hashCode()的預設行為是對在heap上的物件產生獨特的值,如果沒有override過hashCode(),則該class的兩個物件怎樣都不會被認為是相同的。
TreeSet:防止重複並保持有序 TreeSet<Class> classSet=new TreeSet<Class>(); //呼叫沒有引數的建構函式來用TreeSet取代HashSet意味著以物件的compareTo()方法來進行排序 classSet.addAll(classList); 要使用TreeSet,下列一項必須為真: *集合中的元素必須是有實現Comparable的型別,並覆蓋了compareTo(Object o)方法。例如:
或*使用過載、取用Comparator引數的建構函式來建立TreeSet。例如:
ArrayList<class> classList=new ArrayList<class>();
HashSet<class> classSet=new HashSet<class>();
classSet.addAll(classList); //addAll()可以複製其他集合的元素,效果就跟一個一個加進去一樣
但是僅僅這樣做的話還是會有重複;
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);}