zoukankan      html  css  js  c++  java
  • HashSet 注意点

    HashSet 通过哈希算法来存取集合中的对象,有很好的存取和查找性能 。 

    自定义Customer 类型,想通过比较name和age过滤重复的 。

    package test.java;
    
    public class Customer {
    
        String name;
        int age;
    
        public Customer(String name,int age){    //构造方法没有返回值
            this.name=name;
            this.age=age;
        }
        public boolean equals(Object o){
            if(this==o) return true;
            if(!(o instanceof Customer)){
                return false;
            }
            Customer other= (Customer ) o;  // 记得!!!
            return (this.name.equals( other.name)&&this.age==other.age);
    
        }
    
       /* public int hashCode(){
            int result ;
            result=(name==null)?0:name.hashCode();
            result=29*result+age;
            return result;
        }*/
    }
    package test.java;
    import java.util.HashSet;
    import java.util.Set;
    
    public class test {
        public static void main(String[] args) {
            Customer a=new Customer("Tom",25);
            Customer b=new Customer("Tom",25);
            Set<Customer> set=new HashSet<Customer>();
            set.add(a );
            set.add(b);
            System.out.println(set.size());
        }
    }

    当Customer咩有覆盖hashCode方法时,集合长度是2,覆盖了hasdCode时才是1 。

    为了保证HashSet的正常工作,如果Customer覆盖了equals方法,也应该覆盖hashCode方法,并且保证两个相等的Customer对象的哈希码也是一样的。详见《面向对象编程》 P442

  • 相关阅读:
    函数 out 传值 分割
    函数
    特殊集合
    集合
    数组

    穷举
    循环
    mac 软件安装
    实用信息查询接口
  • 原文地址:https://www.cnblogs.com/assult/p/4283021.html
Copyright © 2011-2022 走看看