美文网首页
Set集合,HashSet集合

Set集合,HashSet集合

作者: 李霖神谷 | 来源:发表于2017-04-12 21:50 被阅读20次

    Set判断两对象是否相同,不是使用==运算符,而是根据equals方法,只要方法返回值为true,Set就不会接收这两个对象。
    HashSet是Set接口的典型实现,大多数使用Set集合时就使用这个实现类。
    其具有以下几个特点:
    不能保证元素的排列顺序,顺序有可能发生变化。
    HashSet不是同步的,假设多个线程同时修改HashSet集合时,则必须通过代码来实现。
    集合元素可以为null。
    当向HashSet集合存入一个集合时,HashSet会调用该对像的hashCode方法来得到该对像的hashCode值,根据该值来确定该对像在HashSet中储存的位置,HashSet判断两个对象相等必须通过equals方法相等,并且两个对象返回的hashCode的值相等。

    import java.util.HashSet;
    
    class A{
        public boolean equals(Object obj){
            return true;
        }
    }
    class B{
        public int hashCode(){
            return 8;
        }
    }
    class C{
        public boolean equals(Object obj){
            return true;
        }
        public int hashCode(){
            return 2;
        }
    }
    public class JiHeDemo{
        public static void main(String[] args) {
            HashSet h=new HashSet();
            h.add(new A());
            h.add(new A());
            h.add(new B());
            h.add(new B());
            h.add(new C());
            h.add(new C());
            System.out.println(h);
        }
    }
    

    如果两对象的hashCode方法返回的hashCode值相同,但是通过equals方法比较返回的是false将会比较麻烦,因为两对象HashCode值相同,所以HashSet试图将他们保存在同一位置,但是又不行(否则将只剩下一个对象),而hashSet访问集合元素时,也是根据元素的hashCode值来快速定位的。如果HashSet两个以上的元素具有相同的hashCode值,将会导致性能的下降。

    相关文章

      网友评论

          本文标题:Set集合,HashSet集合

          本文链接:https://www.haomeiwen.com/subject/ishvattx.html