........
public class Address {
InetAddress IP;
int port;
String usrID;
}.......
static List<Address> IPTable = new ArrayList<Address>();
.......
其中ArrayList的contains和indexOf等方法分别在类Address内容完全相同但地址不同的情况下无法判定是否包含此对象和正确返回索引,因此需要重载其中的equals和hashcode方法,可小弟我是初学者,希望高手帮我写一下。
public class Address {
InetAddress IP;
int port;
String usrID;
}.......
static List<Address> IPTable = new ArrayList<Address>();
.......
其中ArrayList的contains和indexOf等方法分别在类Address内容完全相同但地址不同的情况下无法判定是否包含此对象和正确返回索引,因此需要重载其中的equals和hashcode方法,可小弟我是初学者,希望高手帮我写一下。
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();
}
}
似乎不够完美,不过我一时也想不起一个能够完全唯一的函数了,呵呵
这时候要在InetAddress 里重写equals 和hashcode方法,而不是在这里
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;
}
//供参考
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>
{
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()) ;
}}