![]() |
1
11
通常这些方法很快。 您应该检查以下几点:是否实现了哈希代码?它们是否足够均匀?否则你会得到垃圾表演。 http://trove4j.sourceforge.net/ <--这有点快,节省了一些内存。我在50000个更新上保存了几毫秒 您确定正确使用地图/集合吗?也就是说,不要试图迭代所有的值或类似的东西。此外,例如,不要执行包含操作,然后执行删除操作。只需检查移除。 还要检查您是否使用双精度vs双精度。我注意到在成千上万的检查中有一些MS性能改进。 您是否也正确/适当地设置了初始容量? |
![]() |
2
7
|
![]() |
3
6
除了google和commons收藏之外,以下是我所知道的: 当然,您可以始终实现自己的数据结构,这些结构针对您的用例进行了优化。为了更好地提供帮助,我们需要知道您访问模式以及您在集合中存储的数据类型。 |
![]() |
4
4
尝试提高equals和hashcode方法的性能,这有助于加速标准容器对对象的使用。 |
![]() |
5
2
可以将AbstractMap和/或AbstractSet扩展为起点。不久前,我做了这项工作,实现了一个基于二进制trie的映射(键是一个整数,树上的每个“级别”都有一个位位置)。左边的孩子是0,右边的孩子是1)。这对我们来说效果很好,因为密钥是eui-64标识符,而对我们来说,前5个字节的大部分时间都是相同的。 要实现抽象映射,至少需要实现entry set()方法,以返回一组map.entry,每个都是键/值对。 要实现一个集合,可以扩展抽象集并提供size()和迭代器()的实现。 不过,至少是这样。您还需要实现get和put,因为默认映射是不可修改的,get的默认实现通过entryset迭代以查找匹配项。 |
![]() |
6
2
您可以通过以下方式节省一点内存: (a)使用A 更强、更宽的哈希代码 因此 避免储存钥匙 ; (b)从阵列中分配自己, 避免为每个哈希表条目创建单独的对象 . 如果它是有用的,这里是一个不加修饰的Java实现 数字接收器 我有时发现哈希表很有用。您可以直接在一个字符序列(包括字符串)上键入键,否则您必须自己为您的对象设计一个强大的64位哈希函数。 记住,这个实现 不储存钥匙 ,因此,如果两个项目具有相同的哈希代码(按照2^32的顺序进行哈希处理后会得到相同的哈希代码,或者如果具有良好的哈希函数,则会有几十亿个项目),则一个项目将覆盖另一个项目:
|
![]() |
7
1
查看GNU Trove: |
![]() |
8
1
公共集合中至少有一个实现是专门为速度构建的: Flat3Map 非常具体的一点是,只要不超过3个元素,它就会非常快。 我怀疑通过遵循@thaggie的建议add查看equals/hashcode方法的时间,您可能会获得更多里程。 |
![]() |
9
1
你说你对一些课程做了概述,但是你有没有做过任何时间来检查他们的速度?我不知道你会怎么检查他们的内存使用情况。当您比较不同的实现时,手头上有一些具体的数字似乎是件好事。 |
![]() |
10
1
这里有一些注释和到几个可选数据结构库的链接: http://www.leepoint.net/notes-java/data/collections/ds-alternatives.html 我还将投下一张支持FastUtil的强烈票。(在另一个响应和该页面中提到)它的数据结构比您可以动摇的多,并且版本针对作为键或值的基元类型进行了优化。(缺点是JAR文件很大,但您可以根据需要对其进行修剪) |
![]() |
11
1
几年前我做过类似的事情——非常大的地图和布景,还有很多。默认的Java实现占用了太多的空间。最后,我滚动了自己的代码,但只有在检查了代码所需的实际使用模式之后。例如,我有一组已知的大型对象,这些对象是在早期创建的,一些地图是稀疏的,而另一些则是密集的。其他结构单调地增长(没有删除),而在其他地方,使用“集合”并偶尔做一些无害的额外工作来处理重复项要比花时间和空间来避免重复更快。我使用的许多实现都是基于数组的,并且利用了这样一个事实:我的哈希代码是按顺序分配的,因此对于密集映射,查找只是一个数组访问。 带走信息:
哦,写单元测试… |
![]() |
12
1
有时,当我看到map和set操作使用高百分比的CPU时,它表明我已经过度使用了map和set,并且重新构造了我的数据,几乎消除了前10%的CPU使用者的收集。 查看是否可以避免集合的副本、对集合的迭代和任何其他操作,这些操作会导致访问集合的大多数元素并创建对象。 |
![]() |
13
0
可能不是那么多
|
![]() |
14
0
公共集合具有 FastArrayList , FastHashMap 和 FastTreeMap 但我不知道它们的价值… |
![]() |
15
0
|
![]() |
16
0
您使用的是哪个版本的JVM? 如果你不在6号(尽管我怀疑你在),那么换到6号可能会有帮助。 如果这是一个在Windows上运行的服务器应用程序,请尝试使用-server来使用正确的热点实现。 |
![]() |
lagivan · 如何使用map参数测试XQuery函数 10 年前 |
![]() |
sagar · 我们可以在其他映射中使用嵌套映射作为键吗? 10 年前 |
![]() |
user2906420 · 创建传单自定义复选框控件 10 年前 |
![]() |
Ali-Alrabi · 要根据对象键对地图进行排序 10 年前 |
![]() |
SimplGy · javascript中按对象引用哈希 10 年前 |
![]() |
city · 如何在C++映射中提取具有相同前缀的记录? 10 年前 |
![]() |
alvas · 使用带有附加参数的map-python 10 年前 |
|
Bapho · ArrayList还是Map?还有关于如何存放孩子的帮助 10 年前 |