新建pojo
package test;
public class cat
public string getname()
public void setname(string name)
public integer getage()
public void setage(integer age)
public boolean equals(object obj)
if (!(obj instanceof cat))
cat p = (cat) obj;
if (this.name.equals(p.name) && this.age == p.age) else
}public int hashcode()
public string tostring()
}
測試:
public class testmap )
public static void main(string args)
//hashmap
map mpx = new hashmap();
mpx.put(new cat("kitty",1), "kitty_1");
mpx.put(new cat("jime",2), "jime_2");
mpx.put(new cat("kitty",1), "kitty_2");
set> allsetx = mpx.entryset();
iterator> iterx = allsetx.iterator();
while (iterx.hasnext())
system.out.println("**********====identityhashmap:");
//identityhashmap
map imp = new identityhashmap();
imp.put(new cat("kitty",1), "kitty_1");
imp.put(new cat("jime",2), "jime_2");
imp.put(new cat("kitty",1), "kitty_2");
set> iset = imp.entryset();
iterator> iterxx = iset.iterator();
while (iterxx.hasnext())
}}
控制台輸出:
2 --> t
1 --> t
姓名:jime;年齡:2 --> jime_2
姓名:kitty;年齡:1 --> kitty_2
**********====identityhashmap:
姓名:kitty;年齡:1 --> kitty_2
姓名:kitty;年齡:1 --> kitty_1
姓名:jime;年齡:2 --> jime_2
檢視hashmap的put(k,v)
public v put(k key, v value)
}modcount++;
addentry(hash, key, value, i);
return null;
}
檢視:identityhashmap.put(object obj, object obj1)
public object put(object obj, object obj1)
modcount++;
aobj[j] = obj2;
aobj[j + 1] = obj1;
if(++size >= threshold)
resize(i);
return null;
}
總結:[color=blue]1.簡單說identityhashmap與常用的hashmap的區別是:
前者比較key時是「引用相等」而後者是「物件相等」,即對於k1和k2,當k1==k2時,
identityhashmap認為兩個key相等,而hashmap只有在k1.equals(k2) == true 時才會認為兩個key相等。
2.identityhashmap 允許使用null作為key和value. 不保證任何key-value對的之間的順序,
更不能保證他們的順序隨時間的推移不會發生變化。
3.identityhashmap有其特殊用途,比如序列化或者深度複製。或者記錄物件**。
舉個例子,jvm中的所有物件都是獨一無二的,哪怕兩個物件是同乙個class的物件
,而且兩個物件的資料完全相同,對於jvm來說,他們也是完全不同的,
如果要用乙個map來記錄這樣jvm中的物件,你就需要用identityhashmap,而不能使用其他map實現[/color]
深刻理解IdentityHashMap
新建pojo package test public class cat public string getname public void setname string name public integer getage public void setage integer age public...
JS深刻理解補充
對於函式的理解,首先看乙個函式定義 function functiondefined 顯而易見,functiondefined 為函式名字,在js中為指向這個函式體的指標,代表這個函式的指標的變數,並且和原始資料型別一樣儲存在棧中。而functiondefined函式體則儲存在堆中。每當new出乙個...
深刻理解fork呼叫
fork 是linux中的系統呼叫函式,用於建立程序,建立失敗返回 1,建立成功會返回兩次 不是返回了兩個值,而是返回了兩次 需要注意的是fork呼叫一次返回兩次 對父程序而言它返回的是子程序的id,對子程序而言它返回0。子程序是父程序的副本,它將獲得父程序資料空間 堆 棧等資源的副本。注意,子程序...