0

我正在开发一个需要大量内存对象的应用程序。最大的结构之一是

Map<String,Set<OwnObject>> (with Set as HashSet)

OwnObject 是表示数据库中记录的重量级对象。该应用程序可以工作,但具有相当大的内存占用。阅读2001 年 Java 专家时事通讯,我分析了上述大型结构的内存使用情况。HashSet 在后面使用了一个 HashMap,它又是一个相当重量级的对象,我想这是我大部分额外内存的去向。

为了优化结构的内存使用,我尝试了多个版本:

Map<String,List<OwnObject>> (with List as ArrayList)
Map<String,OwnObject[]>

两者都有效,并且都比使用 Set<> 的版本更精简。但是,我想保留 Set 合同(条目的唯一性)。

一种方法是自己实现逻辑。我可以扩展 ArrayList 并确保 add() 中的合同。

是否有实现轻量级集合的框架来遵守 Set 契约?还是我错过了 Java 集合中的一些东西,我可以在不确保自己唯一性的情况下使用这些东西?

4

1 回答 1

0

我实施的解决方案如下:

Map<String,OwnObject[]>

添加和删​​除数组是使用 Arrays.binarySearch() 和 2 个切片 System.arraysCopy()s 完成的,排序和唯一性发生在一边。

于 2013-05-17T05:39:28.097 回答