2011-04-15 51 views
0

我试图在非常内存受限的环境中实现一个Map。我预计地图的值类型会有很多重复(即不仅仅是有很多x和y使得x.equals(y),而是许多x和y使得x == y)。因此,我想将这些指针保存在一个小数组中(通常情况下,少于几十个条目),并使用从字节数组中扩充出来的整数对其进行索引;通常这会导致大量节省。尽管如此,这需要通过某种方式来跟踪不同的引用。我可以在一些列表中对它们全部进行跟踪,并在每次添加新值时对其进行线性搜索,但这样地图不会缩放到超过几百个不同的值(即使大量不同的值价值是不常见的,这不是不可能的)。这种映射对于内部Java类来说应该很容易实现,因为它只需要进行指针比较,但是这个接口似乎没有公开(事实上,因为默认的Object hashCode方法只是返回底层的指针大多数实现中,我处于一个讽刺的地位,就是被实现hashCode的用户所伤害的Map实现者)。在Java中维护一组不同的对象

有没有办法得到这种行为?

+0

IdentityHashMap? – MeBigFatGuy 2011-04-15 04:07:59

回答

2

您是否在寻找java.lang.System.identityHashCode(Object)==运营商?

+0

像[IdentityHashMap](http://download.oracle.com/javase/6/docs/api/java/util/IdentityHashMap.html) – 2011-04-15 04:07:34

+0

是的,这将是伟大的工作;谢谢。 – 2011-04-15 04:07:42

0

正如你可以考虑以下的选择:如果你有一个地图,你有很多dublicate值(其中entry1.getValue() == entry2.getValue()),那么你可以使用你的当前值作为一个重要的

,以及当前键指向内存中与项目列表相同的对象。

Map<SomeType1, List<SomeType2> map = new IdentityHashMap<SomeType1, List<SIneType2>>();