opencms7.5

[/code]// 系統編碼
String systemEncoding = (new OutputStreamWriter(new ByteArrayOutputStream())).getEncoding();

HashMap vs FastHashMap:原文參考http://frenchmay.iteye.com/blog/226784
[code="java"]
public class FastHashMap extends HashMap {
protected HashMap map = null;
protected boolean fast = false;
public FastHashMap() {
super();
this.map = new HashMap();
}
}
FastHashMap繼承於HashMap,存儲由HashMap實現的,通過fast來設置是否是以快速模式執行.可以初步認爲FashHashMap是HashMap的一個代理.



public Object get(Object key) {
if (fast) {
// get方法的實現是線程安全的
return (map.get(key));
} else {
// 對整個map對象同步
synchronized (map) {
return (map.get(key));
}
}
}
所以FastHashMap在get速度上比HashMap快!



public Object put(Object key, Object value) {
if (fast) {
synchronized (this) {
// 克隆一個map,再在map上操作,再替換map;在替換map前所有對象都讀取map;
HashMap temp = (HashMap) map.clone();
Object result = temp.put(key, value);
map = temp;
return (result);
}
} else {
synchronized (map) {
return (map.put(key, value));
}
}
}


做的測試是在slow模式下的FastHashMap和hashmap在單線程訪問的情形下,讀/取50000
個long類型的測試舉例.


結果是

Result:

HashMap put 50000 Object using1.021s

FastHashMap put 50000 Object using1.221s

HashMap get 50000 Object using0.561s

FastHashMap get 50000 Object using0.04s

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章