哈希集大小操作

时间:2017-04-02 04:40:45

标签: java hashset

HashSet常量时间操作的大小操作如何?
我读到包含和大小操作是恒定时间 虽然我理解包含是否是一个恒定时间操作,但是不会将大小操作与元素数量成比例(非线性)吗?

2 个答案:

答案 0 :(得分:2)

简短的回答 - 它是缓存的。

答案越长: HashSetSet实现,其中包含HashMap,其中所有值都是相同的“虚拟值”。它的size()方法只返回地图的size()。如果您查看HashMap的实施,您会看到它有一个size成员。向地图添加元素(例如,使用putputAll)会增加size并从中删除元素会减少size。这样,由于size始终保持最新,因此可以在调用size()时简单地返回它,从而保证恒定的时间执行。

答案 1 :(得分:2)

HashSet在内部存储它有多少元素。

  

不同大小的操作与元素数量成比例(非线性)吗?

如果这不是存储在用于记录保存的字段中,则size()将与支持哈希表的大小成比例,而不是元素的数量,因为您必须扫描所有条目以查看是否存在某些内容。它们往往是相同的(在2x之内),除非哈希表被分配为显着太大或者删除了很多元素。