文章40頁有錯(cuò)誤,m.get(new PhoneNumber(408,867,5309))應(yīng)該改為m.get(new PhoneNumber(707,867,5309)),與文章上面的HashMap例子一致,對(duì)于文章中的代碼,我自己手敲整理了下。
首先是PhoneNumber類,如下代碼
public classPhoneNumber {
private shortareaCode;
private shortprefix;
private shortlineNumber;
publicPhoneNumber(intareaCode, intprefix, intlineNumber){
rangeCheck(areaCode,999,"area code");
rangeCheck(prefix,999,"prefix");
rangeCheck(lineNumber,9999,"line number");
this.areaCode= (short)areaCode;
this.prefix= (short)prefix;
this.lineNumber= (short)lineNumber;
}
private static voidrangeCheck(intarg, intmax,String name){
if(arg <0|| arg > max){
throw newIllegalArgumentException(name +":"+ arg);
}
}
@Override
public booleanequals(Object o) {
if(o ==this){
return true;
}
if(!(oinstanceofPhoneNumber)){
return false;
}
PhoneNumber pn = (PhoneNumber)o;
returnpn.lineNumber==lineNumber&& pn.prefix==prefix&& pn.areaCode==areaCode;
}
private volatile inthashCode;// 輕量級(jí)線程安全
@Override
public inthashCode() {
intresult =hashCode;
if(result ==0){
result =17;// 可以任意不等于0的值
intprimeNumber =31;// 奇素?cái)?shù)
result = primeNumber * result +areaCode;
result = primeNumber * result +prefix;
result = primeNumber * result +lineNumber;
hashCode= result;
}
returnresult;
}
@Override
publicStringtoString() {
returnString.format("(%03d) %03d-%04d",areaCode,prefix,lineNumber);
}
}
調(diào)用如上代碼,如下
Map<PhoneNumber,String> m =newHashMap<PhoneNumber,String>();
m.put(newPhoneNumber(707,867,5309),"Jenny");// 存儲(chǔ)到map中
m.get(newPhoneNumber(707,867,5309));// 從map中取出