在項目開發中遇到須要將Object對象做爲HashMap的key使用的場景,爲了保證HashMap的key的惟一性,故對該對象進行了重寫hashCode方法和重寫equals方法。node
package com.xxx.xxx; /** * @Author: * @Date: * @Description: */ public class ColumnDTO { private String columnid; private String columnname; private String nodepath; private String upperid; private String linkurl; public String getColumnid() { return columnid; } public void setColumnid(String columnid) { this.columnid = columnid; } public String getColumnname() { return columnname; } public void setColumnname(String columnname) { this.columnname = columnname; } public String getNodepath() { return nodepath; } public void setNodepath(String nodepath) { this.nodepath = nodepath; } public String getUpperid() { return upperid; } public void setUpperid(String upperid) { this.upperid = upperid; } public String getLinkurl() { return linkurl; } public void setLinkurl(String linkurl) { this.linkurl = linkurl; } /** * 重寫hashCode方法和equals方法,保證該對象能夠看成HashMap的Key使用 */ @Override public int hashCode() { int result = 17; result = 31 * result + (columnid == null ? 0 : columnid.hashCode()); result = 31 * result + (columnname == null ? 0 : columnname.hashCode()); result = 31 * result + (nodepath == null ? 0 : nodepath.hashCode()); result = 31 * result + (upperid == null ? 0 : upperid.hashCode()); result = 31 * result + (linkurl == null ? 0 : linkurl.hashCode()); return result; } @Override public boolean equals(Object obj) { if(this == obj){ return true;//地址相等 } if(obj == null){ return false;//非空性:對於任意非空引用x,x.equals(null)應該返回false。 } if(obj instanceof ColumnDTO){ ColumnDTO other = (ColumnDTO) obj; //須要比較的字段相等,則這兩個對象相等 if(this.columnid.equals(other.columnid) && this.columnname.equals(other.columnname) && this.nodepath.equals(other.nodepath) && this.linkurl.equals(other.linkurl) && this.upperid.equals(other.upperid)){ return true; } } return false; } }
@Override public int hashCode() { int result = 17; result = 31 * result + (columnid == null ? 0 : columnid.hashCode()); result = 31 * result + (columnname == null ? 0 : columnname.hashCode()); result = 31 * result + (nodepath == null ? 0 : nodepath.hashCode()); result = 31 * result + (upperid == null ? 0 : upperid.hashCode()); result = 31 * result + (linkurl == null ? 0 : linkurl.hashCode()); return result; }
須要對每個成員變量進行相似的hashCode處理,將最終的結果返回做爲hashCode值。ide
@Override public boolean equals(Object obj) { if(this == obj){ return true;//地址相等 } if(obj == null){ return false;//非空性:對於任意非空引用x,x.equals(null)應該返回false。 } if(obj instanceof ColumnDTO){ ColumnDTO other = (ColumnDTO) obj; //須要比較的字段相等,則這兩個對象相等 if(this.columnid.equals(other.columnid) && this.columnname.equals(other.columnname) && this.nodepath.equals(other.nodepath) && this.linkurl.equals(other.linkurl) && this.upperid.equals(other.upperid)){ return true; } } return false; }
須要對每個成員變量進行比較,全部成員變量都相同才返回true,不然返回false。this