Set

来源:互联网 发布:vmware11 mac os补丁 编辑:程序博客网 时间:2024/06/05 17:41
                                             ==================Set==========================
无序,不可重复

 set接口中的方法和Collection一致

                                                          -----------------HashSet-------------
内部数据结构是哈希表,是不同步的
set集合只有遍历器这种取


哈希表确定元素是否相同
   1.如果两个元素的哈希值相同,在判断两个对象内容是否相同。
   2.判断哈希值相同,其 实判读的是hashCode的方法。判读内容相同,用的是equals方法。


有时候比如要默认姓名,年龄相同的两个元素为同一对象,这时就要重写hashCode方法和equal方法。
  class Test
 2 {
 3     private int num;
 4     private String data;


18     public int hashCode()
19     {
20         //重写equals,也必须重写hashCode。具体后面介绍。
         } 





 6     public boolean equals(Object obj)
 7     {
          //看是不是同一个对象
 8         if (this == obj)
 9             return true;


10          //obj不能为空()
                                    //看是否为同一类??????等同于 
                                                                       //if(!(obj instanceof Test)) 
                                                                    // return false; // 但避免 这种写法,因为会破坏equals方法的公约
                                                                                                                   //自反性:  x.equals(x) 一定是true
                                                                                                                   对null:  x.equals(null) 一定是false
                                                                                                             对称性:  x.equals(y)  和  y.equals(x)结果一致
                                                                                                       传递性:  a 和 b equals , b 和 c  equals,那么 a 和                                                                                                                        c也一定equals
                                                                                                 一致性:  在某个运行时期间,2个对象的状态的改变不                                                                                                                 会  不影响equals的决策结
                                                                                                           那么,在这个运行时期间,无论调用多少次                                                                                                                          equals,都返回相同的结果
11         if ((obj == null) || (obj.getClass() != this.getClass()))
12             return false;
13 
           //能执行到这里,说明obj和this同类且非null

14         Test test = (Test) obj;
15         return num == test.num&& (data == test.data || (data != null && data.equals(test.data)));
16     }
26 }


Linkedhashset
取按照输入顺序输出


TreeSet
自定义输出顺序

首先实现(implements )Comparable接口
重写compareTo方法 Compbyname
在compareTo方法中定于输出顺序

public int compareTo(Object o){

   person p=(person)o;

   if(this.age>p.age)

      return 1;

     if(this.age<p.age)

      return -1;

     retrun o;

}