dictionary原理個人總結:
* 微軟實現
* 賦值:
* 1.將key用hash函式計算(類似md5)
* 2.將hash結果取餘放入hash桶(聽起來很高大上,就是放入不同陣列,類似hash表)
* * 取值:賦值過程差不多,取值時間複雜度基本為1。
* 理解本質:取餘計算後,直接取陣列下標。如果下標多個值,再指向乙個鍊錶裝資料。
缺點:1.需要記憶體空間比較大。
2.插入存在擴容。
下面為和list對比測試結果:
**:
using10個資料:system;
using
system.collections.generic;
using
system.diagnostics;
using
system.linq;
using
system.text;
using
system.threading.tasks;
namespace
dicfind();
listfind();
}public
void
dicfind()
public
void
listfind()}}
1000個資料:
100000個資料
10000000個資料
從測試結果總結:dictionary隨著資料量增大,計算次數是沒有多大變化的。這就是資料結構做的好,比如二分查詢和遍歷查詢的區別。
GRASP個人理解
這裡是一篇比較全面的概覽 個人比較注重 開閉原則 對擴充套件開發對修改關閉 變與不變的分離 將變化的部分和不變的部分分開 組合 聚合復用原則 盡量使用類的組合復用,不要使用繼承 還有即使高內聚低耦合 實際上著名的gof模式也不盡都對這些原則遵循的很好,如訪問者模型,將原被訪問者的部分內部邏輯分離出去...
ThreadLocal個人理解
為了加深理解,將最近對threadlocal的了解和原始碼分析記錄總結一下。threadlocal可以為執行緒提供區域性變數。使用threadlocal的get 方法,可以在當前執行緒能夠訪問的類和方法中,得與當前執行緒相關聯的變數值。不過,執行緒區域性變數並不是由threadlocal物件儲存維護...
JavaScript this個人理解
一.呼叫公共函式,this預設指向的為window 直接上幾個 1.var a 10 function test test 結果10 2.var a 10 function test function test1 test 結果 10 10 3.var a 10 function test test...