Pie*_*rre 5 java algorithm collections performance insert
有没有办法通过指定项目的顺序来优化java.util.Collection中的插入速度?
例如
java.util.Set<String> set = java.util.TreeSet<String>();
Run Code Online (Sandbox Code Playgroud)
这个解决方案:
set.add("A");
set.add("B");
set.add("C");
set.add("D");
set.add("E");
Run Code Online (Sandbox Code Playgroud)
比这个更快(随机顺序)?
set.add("E");
set.add("D");
set.add("C");
set.add("A");
set.add("B");
Run Code Online (Sandbox Code Playgroud)
(以及其他集合的相同问题:HashMap,hastable ......)
谢谢
简单的答案是"时间和看到".
另一个答案是"无所谓".这似乎是微观优化,几乎不值得努力.我认为它属于"微优化剧场悲剧悲剧"的范畴.
对于java.util.Map和java.util.Set没有,因为这些是接口,并且有不同的实现.
对于具体实现,它不是一个值得优化的.如果您遇到性能问题,请选择更合适的实施方案,或重新考虑您需要存储的内容和方式.
在一台普通的笔记本电脑上插入5000个随机数到一个HashSet大约需要一毫秒,所以你想插入多少百万个元素才能使这种优化变得有价值?
红黑树(用于实现 Java 的TreeSet/TreeMap )的插入时间保证最坏情况为 O(log n)。如果项目按特定顺序排列,可能会更快,但我不确定那会是什么(可能预排序会最快?)。
插入哈希表是一个 O(1)(恒定时间)操作。插入的主要工作是计算hashcode。
编辑:Starblue 建议预排序可能会产生最坏情况的性能,因此您可以尝试随机排序。