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

  • 相关阅读:
    css实现文字相对于图片垂直居中
    node能做的性能优化
    vue.config.js中vue的配置
    react/vue项目腾讯云/阿里云服务器linux部署
    taro项目结构分析和坑
    vscode自动编译less
    css彩色字体
    微信小程序文件上传
    小程序html解析
    小程序表单
  • 原文地址:https://www.cnblogs.com/assult/p/4283021.html
Copyright © 2011-2022 走看看