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     }

 

你可能感兴趣的:(Collection)