2012-08-22 42 views
0

InMemoryCookieStore是java的默認CookieStore,但主存儲是ArrayList,在最壞的情況下,添加和移除操作將花費O(n),並且index是map,它掃描keySet以移除過期的cookie。爲什麼它使用樹(它可以很好地表示域名,比如.b.com是.a.b.com的父級),並設置(在常量時間內定位Cookie)。爲什麼CookieStore的默認實現不使用樹形結構?

回答

1

的的CookieStore有一個方法

List<HttpCookie> getCookies() 

所以它必須保持,或所有cookie複製的需求。我認爲他們決定維持一個清單是最有效的。

+1

也許,但是一個集合可能會更有效率,因爲當每個請求進來時add op都會調用。 – ivoryxiong

+0

AFAIK它使用的所有List數據類型可以更改爲Set。我沒有看到訂單很重要的原因,也看不出重複。 –

0

你有多少次使用O(n)在性能方面明顯大於O(1)?在子優化和代碼可管理性之間進行選擇時,大多數都選擇乾淨,可管理的代碼。

+0

同意,爲什麼它只是一個默認的實現。所以我必須爲我的網絡爬蟲實現更高效的工作〜 – ivoryxiong

+0

好吧,繼續吧,自己敲門;)海事組織,這是浪費時間。從頭文件解析每個cookie的成本將超過將Cookie添加到CookieStore的成本高出許多個數量級,這使得對整個執行時間內的Cookie存儲庫的優化完全不明顯。 – pap

相關問題