zoukankan      html  css  js  c++  java
  • java hashcode,equals方法必须重写

    HashSet存储自定义对象保证元素唯一性

    * 存储自定义对象,并保证元素唯一性。

    HashSet<Person> hs = new HashSet<>();
    hs.add(new Person("张三", 23));
    hs.add(new Person("张三", 23));
    hs.add(new Person("李四", 23));
    hs.add(new Person("李四", 23));
    hs.add(new Person("王五", 23));
    hs.add(new Person("赵六", 23));

    如果输出该hashset,重复对象都输出。由于全部都是new person  ,引用的地址值都不同,被认为不同对象。

    有必要想办法去除重复对象!


    必须重写hashCode()和equals()方法

     

    代码优化:
    * 为了减少equals方法比较次数,优化hashCode()代码写法。
    * 最终就是使用Eclipse自动生成重写后的hashcode(),equals()方法。

    HashSet如何保证元素唯一性的原理
    * 1.HashSet原理
    * 我们使用Set集合都是需要去掉重复元素的, 如果在存储的时候逐个equals()比较, 效率较低,哈希算法提高了去重复的效率, 降低了使用equals()方法的次数
    * 当HashSet调用add()方法存储对象的时候, 先调用对象的hashCode()方法得到一个哈希值, 然后在集合中查找是否有哈希值相同的对象
    * 如果没有哈希值相同的对象就直接存入集合
    * 如果有哈希值相同的对象, 就和哈希值相同的对象逐个进行equals()比较,比较结果为false就存入, true则不存
    * 2.将自定义类的对象存入HashSet去重复
    * 类中必须重写hashCode()和equals()方法
    * hashCode(): 属性相同的对象返回值必须相同, 属性不同的返回值尽量不同(提高效率)
    * equals(): 属性相同返回true, 属性不同返回false,返回false的时候存储。

    如下为自定义简单的重写equals和hashcode方法:

    eclipse重写的方法:(高质量的代码)

  • 相关阅读:
    Binary Tree Inorder Traversal
    Populating Next Right Pointers in Each Node
    Minimum Depth of Binary Tree
    Majority Element
    Excel Sheet Column Number
    Reverse Bits
    Happy Number
    House Robber
    Remove Linked List Elements
    Contains Duplicate
  • 原文地址:https://www.cnblogs.com/yimian/p/6517669.html
Copyright © 2011-2022 走看看