Set:無序、不可以重復元素
|-- HashSet : 數據底層結構是哈希表。線程是非同步的。
保證元素唯一性的原理:判斷元素的hashcode的值是否相同
如果相同,還會繼續判斷元素的equals方法,是否為true。
|-- TreeSet:可以對Set集合中的元素進行排序。
底層數據結構是二叉樹、 保證元素唯一性的依據: compareTo方法return(); comparable 里面是 compareTo方法。
TreeSet排序的第一種方式:讓元素自身具備比較性,元素需要實現comparable接口,覆蓋compareTo方法。這種方式也稱為元素的自然排序,或者叫默認排序。
TreeSet排序的第二種方式:當元素自身不具備比較性,或者具備的比較性不是所需要的。 這時需要讓集合自身具備比較性。定義比較器。 兩種都存在,以比較器為主。
定義一個類, 實現comparator,覆蓋 compare方法。 進行自定義比較。
import java.util.*; public class Practice_1 { public static void main(String[] args) { // TODO Auto-generated method stub TreeSet<Object> ts = new TreeSet<Object>(new MyCompare()); ts.add("abcd"); ts.add("cg"); ts.add("stfff"); ts.add("sbbbb"); ts.add("abdwqeqw"); Iterator it = ts.iterator(); while(it.hasNext()) { sop(it.next()); } } public static void sop(Object obj) { System.out.println(obj); } } class MyCompare implements Comparator //示例 ! { public int compare(Object o1, Object o2) { String s1 = (String)o1; String s2 = (String)o2; int num = new Integer(s1.length()).compareTo(new Integer(s2.length())); if( num ==0 ) { return s1.compareTo(s2); } return num; } }