如何为特定类编写hashCode方法?

2024-03-24

我正在尝试为我的简单类生成 hashCode() 方法,但我没有得到任何结果。我将不胜感激任何帮助。我已经实现了 equals() 方法,如下所示,并且还想知道是否需要实现compareTo() 方法。我已经导入 java.lang.Character 来使用character.hashCode(),但它似乎不起作用。

private class Coord{
    private char row;
    private char col;
    public Coord(char x, char y){
        row = x;
        col = y;
    }
    public Coord(){};

    public char getX(){
        return row;
    }

    public char getY(){
        return col;
    }

    public boolean equals(Object copy){
        if(copy == null){
            throw new NullPointerException("Object entered is empty");
        }
        else if(copy.getClass()!=this.getClass()){
            throw new IllegalArgumentException("Object entered is not Coord");
        }
        else{
            Coord copy2 = (Coord)copy;
            if(copy2.row==this.row && copy2.col==this.col)
                return true;
            else
                return false;
        }
    }

}

提前致谢...

comparTo() 方法给我 java.lang.Comparable 转换错误..

public int compareTo(Object copy){
        if(copy==null){
            throw new NullPointerException("Object entered is empty");
        }
        else if(copy.getClass()!=this.getClass()){
            throw new IllegalArgumentException("Object entered is not Coord");
        }
        else{
            Coord copy2 = (Coord)copy;
            if(copy2.row==this.row && copy2.col==this.col){
                return 0;
            }
            else if(copy2.col < this.col){
                return -1;
            }
            else{
                return 1;
            }
        }
    }

谢谢...


要实现 hashCode,您可以覆盖 Object 的默认实现:

@Override
public int hashCode()
{
    return row ^ col;
}

这并不是一个真正理想的哈希,因为它的结果是非常可预测的,并且很容易用于两个不同的哈希Coord对象返回相同的值。更好的散列将利用内置的Arrays班级来自java.util (http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html):

@Override
public int hashCode()
{
    return Arrays.hashCode(new Object[]{new Character(row), new Character(col)});
}

您可以使用此方法生成具有任意数量字段的相当好的哈希值。

要实现compareTo,您需要您的类实现可比 http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html:

public class Coord implements Comparable<Coord>

完成此操作后,您可以使compareTo采用类型参数Coord而不是打字Object,这将省去您检查其类型的麻烦。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为特定类编写hashCode方法? 的相关文章

随机推荐

  • 当我使用 Finchley.M5 时,spring-cloud-starter-eureka 无法解析

    尝试使用 Spring Cloud Gateway 创建我自己的 api 网关 下面是我的 build gradle 文件 buildscript ext springBootVersion 1 5 9 RELEASE apply plug
  • MSVC 内联 ASM 到 GCC

    我正在尝试处理 MSVC 和 GCC 编译器 同时更新此代码库以在 GCC 上工作 但我不确定 GCC 内联 ASM 到底是如何工作的 现在我不太擅长将 ASM 翻译成 C 否则我只会使用 C 而不是 ASM SLONG Div16 sig
  • 用于填充电子表格列的一维数组

    我正在使用内置的组服务来提取用户名列表 function getUsersInGroup group var usersInGroup GroupsApp getGroupByEmail group getUsers return user
  • throw 和 $pscmdlet.ThrowTerminateerror() 之间的区别?

    在 PowerShell 中 有什么区别throw ErrorMsg and PScmdlet ThrowTerminatingError ErrorMsg 它们是相同还是不同 如果它们不同 哪一个更可取 Throw创建一个script 终
  • R install_github:错误:无法安装“未知包”[重复]

    这个问题在这里已经有答案了 我是 GitHub 的新手 我很困惑 我无法得到install github上班 我按照此处的有用说明设置了我的帐户 https kbroman org github tutorial pages init ht
  • 应如何管理函数范围内声明的计时器的清理?

    在下面的代码中 一个Timer在函数内部声明 它也订阅了Elapsed event void StartTimer System Timers Timer timer new System Timers Timer 1000 timer E
  • 将 CGrect 值更改为用户坐标系

    我有一个CGRect 我可以将其坐标转移到用户坐标系中 即左下角到顶部而不是左上角到底部 是否有任何预定义的方法或者我需要手动计算 提前致谢 要将矩形从原点位于左下角的坐标系 我们将其称为传统坐标系来命名 转换为原点位于左上角的系统 iPh
  • 如何使用 docker 将 django cookiecutter 项目上传并部署到heroku?

    我正在使用 django cookiecutter 带有 docker 和 heroku 设置 开发一个应用程序 并且已经部署它 这是我的第一个项目 所以之前没有 django docker 或 heroku 的经验 我已经在 cookie
  • 如何在 WHERE 子句中编写带有 SELECT 语句的 SQL DELETE 语句?

    数据库 Sybase Advantage 11 在我寻求标准化数据时 我试图删除从中得到的结果SELECT陈述 SELECT tableA entitynum FROM tableA q INNER JOIN tableB u on u q
  • 异步等待获取未定义。如何处理?

    我目前正在学习async await fetch我创建了以下示例来帮助我学习 下面的工作示例 从公共 API 获取三个随机 json 记录 提取出url从每次返回json 创建三个img元素 追加三img文档正文的元素 请注意promise
  • 将 RGBA 图像转换为灰度 Golang

    我目前正在开发一个将 RGBA 图像转换为灰度的程序 我之前问了一个问题 并得到了以下答案 更改单个像素的颜色 Golang 图像 https stackoverflow com questions 36573413 change colo
  • Array.length = 0 和 Array =[] 之间的区别?

    有人可以解释一下它们两者之间的概念差异吗 在某处读到第二个通过销毁对现有数组的所有引用来创建一个新数组 而 length 0 只是清空数组 但这对我来说不起作用 Declaration var arr new Array 下面是一次又一次执
  • 如何快速清除简单类型的记录?

    我有一个这样定义的结构 const MaxSignalRecords 255 type TSignalRecord record signal1 integer signal2 integer signal3 integer signal4
  • Inno Setup - 允许用户选择“只有我”或“任何使用这台计算机的人”

    我遇到的一些安装程序让我选择 只为我 或 为 使用这台计算机的任何人 安装应用程序 如何让我的 Inno Setup 脚本向用户提供此选择 以便我可以根据他们的回答方式更改安装程序的操作 有很多方法可以解释 只有我 与 所有用户 问题的答案
  • 在 Woocommerce 产品类别小部件中显示子类别档案

    我正在使用 Woocommerce 建立一家商店并使用 WooCommerce 产品类别小部件 我已经设置了许多产品类别和子类别 其中一个类别是 海报 并有几个子类别 例如 星座 旅行 自然 默认情况下 Woocommerce 仅显示父类别
  • 在 avro 文件中存储空值

    我有一些 json 数据 如下所示 id 1998983092 name Test Name 1 type search string creationDate 2017 06 06T13 49 15 091 0000 lastModifi
  • 如何在nuget和项目引用之间有效切换?

    我正在开发一个私有测试工具 它分为一个核心库和几个扩展插件 扩展项目通过私有 MyGet feed 依赖于核心库 因此我只需单击打包并上传到 MyGet feed 即可 无需太多麻烦 我遇到的问题是 除非我发布核心 NuGet 包的全新版本
  • 检测 SSL 浏览器支持

    如何检测客户端浏览器是否支持 SSL 我不是指 到服务器变量 HTTP 我希望能够确定 如果浏览器不支持 SSL 附 我知道这是可能的 因为这家公司 http www cyscape com http www cyscape com 有一款
  • AutoMapper:如何从字符串中解析 Int 并可以根据数据类型创建规则?

    我的表单有两个模型 一个是指向它的 ViewModel 另一个是来自它的 ControlModel ControlModel 具有所有相同的字段名称和层次结构 但所有字段都是字符串数据类型 如何编写 AutoMapper 代码以将字符串字段
  • 如何为特定类编写hashCode方法?

    我正在尝试为我的简单类生成 hashCode 方法 但我没有得到任何结果 我将不胜感激任何帮助 我已经实现了 equals 方法 如下所示 并且还想知道是否需要实现compareTo 方法 我已经导入 java lang Character