Set接口
關(guān)于Set接口,在上課時總是很少提到,所以對它的認識并不多,實現(xiàn)set接口的類,里面的元素沒有重復(fù)的。他依賴于map,其實我們保存的值,是保存的key,在map中,key不會重復(fù),所以set也就沒有重復(fù)的元素,它的實現(xiàn)類有三個:HashSet,TreeSet,LinkedHashSet.
1 public static void main(String[] args) { 2 //Set<Integer> set = new HashSet<Integer>(); 3 // Set<Integer> set = new TreeSet<Integer>(); 4 Set<Integer> set = new LinkedHashSet<Integer>(); 5 set.add(null); 6 Random rd = new Random(); 7 System.out.HashSet:他是無序的,可以保存null,添加順序和遍歷結(jié)果如下:

LinkedHashSet:他保持了元素的添加順序,可以保存null,添加順序和遍歷結(jié)果如下:

TreeSet:他是一個有序集合,元素按照順序排列,但是不能保存null,添加順序和遍歷結(jié)果如下:

我們自己定義的類,如果要加入到TreeSet中,需要實現(xiàn)接口Comparable 中的compareTo方法 ,定義自己的比較規(guī)則,否則會拋出一個異常。

給個Demo,自定義的規(guī)則是先比較int,再比較string,無論Model1,Model2,Model3的添加順序怎么變,輸出都是一樣的, eg:
1 public class Model implements Comparable { 2 String str; 3 int num; 4 @Override 5 public int compareTo(Object arg0) { 6 Model tmp = (Model)arg0; 7 int cmp = this.num - tmp.num; 8 if(cmp == 0){ 9 return str.compareTo(tmp.str);10 }11 return cmp;12 }13 }14 15 public static void main(String[] args) {16 TreeSet<Model> ts = new TreeSet<Model>();17 Model m2 = new Model();18 m2.str = "121";19 m2.num = 1;20 ts.add(m2);21 22 Model m3 = new Model();23 m3.str = "121";24 m3.num = 2;25 ts.add(m3);26 27 Model m1 = new Model();28 m1.str = "321";29 m1.num = 1;30 ts.add(m1);31 32 Iterator<Model> it = ts.iterator();33 while(it.hasNext()){34 Model tmp = it.next();35 System.out.println(tmp.str + ":" + tmp.num);36 }37 }
新聞熱點
疑難解答