ã¯ããã«
ããã£ã°ããã°ã«ãã¦ãããã¼âªã£ã¨
( ´ã¼`)ãã¥ã¼ï¼ï¼ï¼(ï¾Ðï¾)ï¾ï½¯ï¼
ã©ã¼ã
ä»æ¥èªãã ã¨ãã
45 ãã¼ã¸ã 66 ãã¼ã¸
ååã¯ãã¡ã
hashCode 2 å¥ç´
- ã·ã°ããã£ã«ã³ããªãã£ã¼ã«ããå¤æ´ããªããã°ãã㤠hashCode ãå¼ã³åºãã¦ãå¤ã¯å¤ãããªã
- x.equals(y) ã true ã®å ´åã¯ã x.hashCode() == y.hashCode() ã true
equals ããªã¼ãã¼ã©ã¤ãããã hashCode ããªã¼ãã¼ã©ã¤ããã¹ã
åè¿°ã® 2 å¥ç´ãå®ãããã«å¿ è¦
x.equals(y) ã false ã®å ´å
ããªããããã x.hashCode() != y.hashCode() ã«ãªãå¿
è¦ã¯ãªããã
å¤ããã©ãã¦ããã»ãã HashMap ã®ãã¼ã¨ãã¦ä½¿ã£ãã¨ãã®ããã©ã¼ãã³ã¹ãããã
ããã©ã¼ãã³ã¹ã«ã¤ãã¦
hashCode é¢æ°ã®ã³ã¹ããã±ãã£ã¦ HashMap ã®æ§è½ãæªããªã£ããæ¬æ«è»¢å
hashCode ã®ä½ãæ¹
é©å½ãªã¼ãã§ãªãå®æ°ã«ãã·ã°ããã£ã«ã³ããªãã£ã¼ã«ã®ããã·ã¥å¤ã
result = 31 * result + field.hashCode()
ã¨è¨ãæãã§åä½ããã¦ããã°ãã
ããªããã£ããªå¤ã® hashCode
- boolean
- hashCode = x ? 0 : 1;
- byte, char, short, int
- hashCode = (int) x;
- long
- hashCode = (int) (x ^ (x >>> 32));
- float
- hashCode = Float.floatToIntBits(x);
- double
- long y = Double.doubleToLongBits(x); hashCode = (int) (y ^ (y >>> 32));
ä»ã® hashCode
- null
- hashCode = 0;
- List
- Arrays.hashCode(x);
ã§ãçµå± hashCode ã«é¢ãã¦ã¯
ããã¾ã§èªãã§ããã ãã© Apache Commons ã® HashCodeBuilder 使ããï¼
http://commons.apache.org/lang/api/org/apache/commons/lang/builder/HashCodeBuilder.html
ã¾ãã«å¤éï¼
ããããããã° equals ã
EqualsBuilder 使ããï¼
http://commons.apache.org/lang/api/org/apache/commons/lang/builder/EqualsBuilder.html
ãªããªãã ã£ã¦ã¼ï¼ï¼
ãã¡ãã toString ãã«ãã¼ããï¼
ToStringBuilder 使ããï¼
http://commons.apache.org/lang/api/org/apache/commons/lang/builder/ToStringBuilder.html
ã¾ããã¾ããã¼ã¼ã¼ï¼ï¼ï¼
ãã¨ãã°ã以ä¸ã®ãããªãã¼ã¿ã¯ã©ã¹
public class AdministrativeDivision { private String unit; private String name; public AdministrativeDivision(String name, String unit) { this.unit = unit; this.name = name; } public void setUnit(String unit) { this.unit = unit; } public String getUnit() { return unit; } public void setName(String name) { this.name = name; } public String getName() { return name; } }
ã¡ããã¡ããã£ã¨ããã£ã¦â¦ã
public class AdministrativeDivision { // ç¥ @Override public String toString() { return ToStringBuilder.reflectionToString(this); } @Override public boolean equals(Object o) { return EqualsBuilder.reflectionEquals(this, o); } @Override public int hashCode() { return HashCodeBuilder.reflectionHashCode(this); } }
ã¯ãï¼å®æã£ã¨ï¼
ããããããããããã¼ãªãã¬ã¯ã·ã§ã³æ¥½ã ã¼ï¼
ã·ã°ããã£ã«ã³ããªãã£ã¼ã«ããç¹å®ããã¦ããå ´åã¯
以ä¸ã®ãããªæã
public class AdministrativeDivision { // ç¥ @Override public String toString() { return new ToStringBuilder(this).append("name", name).append("unit", unit).toString(); } @Override public boolean equals(Object o) { if (o == null) { return false; } if (o == this) { return true; } if (o.getClass() != getClass()) { return false; } AdministrativeDivision rhs = (AdministrativeDivision) o; return new EqualsBuilder() .appendSuper(super.equals(o)) .append(name, rhs.name) .append(unit, rhs.unit) .isEquals(); } @Override public int hashCode() { return new HashCodeBuilder().append(name).append(unit).toHashCode(); } }
ããã¼ãï¼ Apache Commons 便å©ããããï¼
clone
clone ã®ä¸ã§ new ã¯ããªãã
super.clone ã§çæããããªãã¸ã§ã¯ããã¤ã¸ã£ã¦è¿ãã
æã£ã¦ãããªãã¡ã¬ã³ã¹ã¯ clone ã㦠super.clone ã®çµæã«ãã£ã¤ãã¦ããã
ã¨ãã¨ãã
ã¦ãã clone ã£ã¦ä½¿ããªãããªã¼ãã¨ãã話ã«ã
static ãã¡ã¯ããªã¡ã½ããã¯ããã¦ãã£ãã»ããããããããªããã¨ãã話ã«ãªã£ãã
compareTo 4 å¥ç´
- signum(x.compareTo(y)) == -signum(y.compareTo(x))
- x.compareTo(y) ãä¾å¤ãã¹ãã¼ããå ´åã¯ã y.compareTo(x) ãä¾å¤ãã¹ãã¼ããªããã°ãªããªã
- x.compareTo(y) ãä¾å¤ãã¹ãã¼ããªãå ´åã¯ã y.compareTo(x) ãä¾å¤ãã¹ãã¼ãã¦ã¯ãããªã
- (x.compareTo(y) > 0 && y.compareTo(z) > 0) ã true ãªã x.comparetTo(z) > 0 ã true (æ¨ç§»ç)
- x.compareTo(y) == 0 ã true ãªã signum(x.comparetTo(z)) == signum(y.compareTo(z)) ã¯å¿ ã true
- x.compareTo(y) == 0 ã true ãªã x.equals(y) (ããã¯ãå¼·ãæ¨å¥¨ããã¦ããã絶対ã§ã¯ãªã)
double, float 㮠compareTo 㨠equals
double, float 㯠NaN ã -0.0 ã®ã¨ã == ã < ã > ãªã©ã®æ¼ç®åã§ã¯ã equals å¥ç´ã compareTo å¥ç´ãå®ããªããã
Double.equals, Float.equals, Double.compare, Float.compare ã使ããªããã°ãªããªã
å¼ãç®ã«ããå®è£
ãªã¼ãã¼ããã¼ããã®ã§ãã¡ãã
ã£ã¦ããã
ããâ¦ããâ¦
@hikoma っくす ãCompareToBuilder 使ãã°ã
http://commons.apache.org/lang/api/org/apache/commons/lang/builder/CompareToBuilder.html
ããã¼ï¼
ã¨è¨ãããã§
ä»æ¥ã¯ã Apache Commons ã«ããã£ã°ããã°ã«ããã¡ããã¾ããï¼ï¼ã