2012-08-22 43 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

相关问题