哪位大侠帮我写个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方法,可小弟我是初学者,希望高手帮我写一下。
...全文
166 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
  • 打赏
  • 举报
回复
楼主我认识你.

62,614

社区成员

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

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