java - 我需要一些关于带有 hashmap 的用户类型的建议
问题描述
我写的用户类型如下
class Item {
int first;
int second;
public boolean equals(Item p) {
if(first == p.first && second == p.second )
return true;
else if(first == p.second && second == p.first)
return true;
else
return false;
}
public int hashcode() {
return Objects.hash(first, second);
}
public void set(Object first, Object second) {
this.first = Integer.parseInt(first.toString());
this.second = Integer.parseInt(second.toString());
}
}
但是,它根本不起作用。我是否错误地设计了重复测试?
解决方案
一些微妙的问题:
- equals 的签名必须是
public boolean equals(Object o)
(所以,是的,您需要与 Object 进行比较,而不是您的直接类) - 对于哈希码,它应该是
hashCode()
. 而且,ewuals() 认为相等的两个对象需要具有相同的 hashCode 值。您的实现没有实现。
真正的教训是:当你打算覆盖方法时,把@Override注解放在它上面,这样编译器就可以告诉你什么时候搞砸了。
在您的情况下,当您打算将您的类与包含的任何 java 集合(例如 Map/HashMap)一起使用时,您实现了两种方法都错误,而您需要正确处理。
推荐阅读
- java - 带有java 8的谷歌appengine的Websocket或本机套接字?
- powershell - 嵌套 ForEach 语句 - Exchange Powershell - 批量删除邮箱日历权限 -
- php - Laravel 5.4 eloquent hasMany 和后续的 PHP 检查批准状态
- python - Windows 上 Anaconda 5.1 中 Python 2.7 环境中的 Tensorflow
- excel - 从网页打印到 pdf 并保存到驱动器
- sql - 在触发器中使用 while exists 在无限循环中发送查询
- javascript - npm update 工作,但仍然在 mac 中显示旧版本
- rust - 编译到 WebAssembly 时无法使 image::load_from_memory() 工作
- java - 班级与班级
在爪哇 - c++ - C++ 控制台 - 大小合适仍然为滚动条留下空白空间