当前位置: 代码迷 >> Java相关 >> java的聚合对比-Collection(续)
  详细解决方案

java的聚合对比-Collection(续)

热度:95   发布时间:2016-04-22 19:57:49.0
java的集合对比----Collection(续)

Set接口

关于Set接口,在上课时总是很少提到,所以对它的认识并不多,实现set接口的类,里面的元素没有重复的。他依赖于map,其实我们保存的值,是保存的key,在map中,key不会重复,所以set也就没有重复的元素,它的实现类有三个: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.println("添加顺序:"); 8         for (int i = 0; i < 20; i++) { 9             int x = rd.nextInt(30);10             set.add(x);11             System.out.print(x + ",");12         }13         System.out.println();14 15         System.out.println("遍历顺序:");16         Iterator iterator = set.iterator();17         while(iterator.hasNext()){18             System.out.print(iterator.next() + ",");19         }20     }

 

 

HashSet:他是无序的,可以保存null,添加顺序和遍历结果如下:

image

LinkedHashSet:他保持了元素的添加顺序,可以保存null,添加顺序和遍历结果如下:

image

TreeSet:他是一个有序集合,元素按照顺序排列,但是不能保存null,添加顺序和遍历结果如下:

image

我们自己定义的类,如果要加入到TreeSet中,需要实现接口Comparable 中的compareTo方法 ,定义自己的比较规则,否则会抛出一个异常。

image

给个Demo,自定义的规则是先比较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     }

 

  相关解决方案