哪位大侠帮我写个equals和HashCode的重载代码

zhuyutian 2008-05-20 04:09:01
........
public class Address {
InetAddress IP;
int port;
String usrID;

}

.......
static List<Address> IPTable = new ArrayList<Address>();
.......
其中ArrayList的contains和indexOf等方法分别在类Address内容完全相同但地址不同的情况下无法判定是否包含此对象和正确返回索引,因此需要重载其中的equals和hashcode方法,可小弟我是初学者,希望高手帮我写一下。
...全文
195 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
steive 2008-05-23
  • 打赏
  • 举报
回复
class InetAddress
{


InetAddress IP;
String usrID;
int port;
public boolean equals (Object o) {
// TODO Auto-generated method stub
if(o instanceof InetAddress)
{
InetAddress R=(InetAddress)o;
if((R.usrID==this.usrID)&&(R.port==this.port)&&(R.IP==this.IP)){
return true;}
else{
return false;
}

}
else
{
return false;
}
}

public int hashCode() {
// TODO Auto-generated method stub
return (port+this.usrID.hashCode()+this.IP.hashCode()) ;
}

}
xms_999 2008-05-22
  • 打赏
  • 举报
回复
<java code>
//供参考
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;

public class Address {
InetAddress IP;
int port;
String usrID; // 如果 usrID唯一就直接用它作为HASHCODE

// eclipse 自动生成
@Override
// public int hashCode () {
// final int prime= 31;
// int result= 1;
// result= prime * result + ( (IP == null) ? 0 : IP.hashCode());
// result= prime * result + ( (usrID == null) ? 0 : usrID.hashCode());
// return result;
// }
@Override
// public boolean equals (Object obj) {
// if (this == obj)
// return true;
// if (obj == null)
// return false;
// if (getClass() != obj.getClass())
// return false;
// final Address other= (Address) obj;
// if (IP == null) {
// if (other.IP != null)
// return false;
// } else if (!IP.equals(other.IP))
// return false;
// if (usrID == null) {
// if (other.usrID != null)
// return false;
// } else if (!usrID.equals(other.usrID))
// return false;
// return true;
// }


// org.apache.commons.lang.builder.HashCodeBuilder 辅助生成
public int hashCode () {
return new HashCodeBuilder(17,37).append(IP).append(usrID).toHashCode();
}

// org.apache.commons.lang.builder.EqualsBuilder 辅助生成
public boolean equals (Object obj) {
Address d= null;
if (obj != null && Address.class.isAssignableFrom(obj.getClass())) {
d= (Address) obj;
}

return new EqualsBuilder().append(IP,d.IP).append(usrID,d.usrID).isEquals();
}
}

class InetAddress {

}
</java code>
xms_999 2008-05-22
  • 打赏
  • 举报
回复
eclipse IDE能自动生成equals和hashcode方法,你也可以使用apache commons包里面工具实现!
kuyesuifeng 2008-05-22
  • 打赏
  • 举报
回复
你的Address是要放在ArryaList中,所以在Address中重写是正确的,因为你要判断的是Address的重复
believefym 2008-05-22
  • 打赏
  • 举报
回复
你写了就是重载了,没有在哪里不哪里的问题
zhuyutian 2008-05-22
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 anqini 的回复:]
引用 9 楼 zhuyutian 的回复:
引用 8 楼 zhuyutian 的回复:
吓!equals和hashcode到底要在哪个地方重写啊?如何找到那地方?告诉我就给分

老子下血本了!所以一定要告诉我重载的详细地点,并写出正确的重载函数才给分,上面写的东东全不行!


提醒哥们,是来问问题,就谦虚点,别这么猖狂~,毕竟是你来请教问题,只告诉你,分只是个虚拟的!
[/Quote]
开个玩笑撒,咋这么没幽默感
zy2419 2008-05-22
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 anqini 的回复:]



提醒哥们,是来问问题,就谦虚点,别这么猖狂~,毕竟是你来请教问题,只告诉你,分只是个虚拟的!
[/Quote]
anqini 2008-05-22
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zhuyutian 的回复:]
引用 8 楼 zhuyutian 的回复:
吓!equals和hashcode到底要在哪个地方重写啊?如何找到那地方?告诉我就给分

老子下血本了!所以一定要告诉我重载的详细地点,并写出正确的重载函数才给分,上面写的东东全不行!
[/Quote]

提醒哥们,是来问问题,就谦虚点,别这么猖狂~,毕竟是你来请教问题,只告诉你,分只是个虚拟的!
zhuyutian 2008-05-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zhuyutian 的回复:]
吓!equals和hashcode到底要在哪个地方重写啊?如何找到那地方?告诉我就给分
[/Quote]
老子下血本了!所以一定要告诉我重载的详细地点,并写出正确的重载函数才给分,上面写的东东全不行!
zhuyutian 2008-05-21
  • 打赏
  • 举报
回复
吓!equals和hashcode到底要在哪个地方重写啊?如何找到那地方?告诉我就给分
zhuyutian 2008-05-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 fulianglove 的回复:]
你重写equals 和hashcode的地方错了,Address 里包含InetAddress 对象IP,
这时候要在InetAddress 里重写equals 和hashcode方法,而不是在这里
[/Quote]
在inetAddress里重写,那是不是修改JDK源代码呀?还是在别的啥地方?
fulianglove 2008-05-20
  • 打赏
  • 举报
回复


//比如InetAddress类为
public class InetAddress
{
private string ip;
private string port;

// getIp()方法 getPort()方法
// setIp()方法 setPort()方法
}



重写equals 和hashcode方法如下:


public boolean equals(Object other) {
if ( (this == other ) ) return true;
if ( (other == null ) ) return false;
if ( !(other instanceof InetAddress) ) return false;
InetAddress castOther = ( InetAddress ) other;

return ( (this.getIp()==castOther.getIp()) || ( this.getIp()!=null && castOther.getIp()!=null && this.getIp().equals(castOther.getIp()) ) )
&& ( (this.getPort()==castOther.getPort()) || ( this.getPort()!=null && castOther.getPort()!=null && this.getPort().equals(castOther.getPort()) ) );
}

public int hashCode() {
int result = 17;
result = 37 * result + ( getIp() == null ? 0 : this.getIp().hashCode() );
result = 37 * result + ( getPort() == null ? 0 : this.getPort().hashCode() );
return result;
}



IamHades 2008-05-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 barech 的回复:]
代码如下吧:
public class Address {
InetAddress IP;
int port;
String usrID;

public boolean equals(Address address){
if(address==null) return false;
if(this==address)return true;

if(!this.IP.equals(address.getIP()))return false;
if(this.port!=address.getPort())return false;
if(!this.usrID.equals(address.getUsrID()))return false;


[/Quote]
fulianglove 2008-05-20
  • 打赏
  • 举报
回复
你重写equals 和hashcode的地方错了,Address 里包含InetAddress 对象IP,
这时候要在InetAddress 里重写equals 和hashcode方法,而不是在这里
barech 2008-05-20
  • 打赏
  • 举报
回复
代码如下吧:
public class Address {
InetAddress IP;
int port;
String usrID;

public boolean equals(Address address){
if(this==address)return true;

if(this.IP!=address.getIP())return false;
if(this.port!=address.getPort())return false;
if(this.usrID!=address.getUsrID())return false;

return true;
}
public int hashCode(){
return IP.hashCode()+port+usrID.hashCode();
}
}
似乎不够完美,不过我一时也想不起一个能够完全唯一的函数了,呵呵
zhuyutian 2008-05-20
  • 打赏
  • 举报
回复
你是?哪一条?
marka945 2008-05-20
  • 打赏
  • 举报
回复
楼主我认识你.
内容概要:本文档为《PCI Express CEM Specification, Revision 5.0, Version 1.0》的技术勘误表(Errata),发布于2021年8月3日,共包含21项修订记录。主要针对原规范中的文本错误(TXT)、术语使用不当或格式问题进行修正,涉及信号定义、材料要求、尺寸参数、表格引用、注释说明等多个技术细节。部分修改明确了关键信号如SENSE0/SENSE1的使用条件,调整了连接器测试夹具推荐做法,并统一了术语表述以避免歧义。所有修订均经过CEM工作组讨论确认,其中多数已被采纳(绿色标记),个别仍需进一步讨论(橙色标记)。; 适合人群:从事PCIe接口设计、高速电路开发、硬件合规性测试的工程师及相关技术人员;熟悉PCIe标准并参与硬件产品开发的1-3年经验研发人员。; 使用场景及目标:①助开发者准确理解PCIe CEM规范中关于高功率连接器、边带信号、PCB布局等关键技术要求;②指导硬件设计与测试过程中规避因文档歧义导致的实现错误;③确保产品符合最新规范版本的电气与机械设计标准; 阅读建议:此资源为规范性文件的补充修正,建议结合原始CEM Specification文档对照阅读,重点关注标红、标绿和标橙的反馈状态,及时更新设计依据,并在实际项目中验证相关修改项的应用一致性。
内容概要:本文是一份针对全国计算机等级考试(NCRE)二级的全面备考指南,覆盖MS Office高级应用与设计、C语言程序设计和Python语言程序设计三大主流科目。文档按照“认知→题库→实战→冲刺”四步递进结构组织,系统介绍了考试基本信息、报名时间、考试形式、合格标准及科目选择建议,并深入剖析各科高频考点、真题规律与操作技巧。重点内容包括MS Office中的Word长文档排版、Excel函数应用与PPT动画设计;C语言中的指针、数组、函数及程序调试;Python中的基础语法、标准库(如turtle、random)与第三方库(如jieba、wordcloud、matplotlib)的应用。此外,还提供公共基础知识精讲、操作题逐步教学、易错题集锦、模拟软件使用指南和科学的时间管理策略,助考生高效备考。; 适合人群:零基础小白、临考突击型考生以及多次未通过的考生,尤其适合非计算机专业希望提升办公技能或理工科学生准备编程语言认证的学习者。; 使用场景及目标:①系统掌握NCRE二级考试所需的知识与实操技能;②通过刷真题、模拟考试和错题复盘提高应试能力;③在短时间内实现从入门到通关的跨越,一次性通过考试。; 阅读建议:建议按文档顺序逐步学习,结合官方考纲和真题进行实践操作,重视动手练习而非仅理论阅读,临考前使用模拟软件全真演练,强化时间分配与答题策略。

62,622

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧