我想要在LinkedHashMap
中保存大量元素。问题是我确实有很多元素,即大于Integer
类的大小。由于size()
类的LinkedHashMap
方法返回int
,我认为LinkedHashMap
中的元素数量不能超过int
的可能性。是对的吗?如果是,我该怎么办?
我还应该提一下,我实际上并不知道我的代码中究竟出现了什么问题。我只是猜测问题在于size()
的{{1}}方法。我只是得到与here相同的错误。
答案 0 :(得分:1)
我不相信拥有拥有如此众多价值的地图是一个好主意,但如果你真的想继续使用它,你可以覆盖LinkedHashMap
并使用BigInteger
类来增加大小。
public class MyLinkedHashMap<K,V> extends LinkedHashMap<K,V> {
BigInteger mySize;
@Override
public V put(K key, V Value) {
if (super.put(key,value) == null) // this will still eventually throw an exception because of the 'size' variable incrementing internally in the HashMap
mySize.add(BigInteger.ONE);
}
@Override
public V remove(Object key) {
if (super.remove(key) != null)
mySize.subtract(BigInteger.ONE);
}
@Override
public int size() {
throw new UnsupportedOperationException();
}
public BigInteger getSize() {
return mySize;
}
}
请注意,因为您无法更改size()
方法的返回类型,所以您必须创建自己的大小方法和变量来检索地图的大小。
此外,您实际上可能需要覆盖HashMap
本身,因为其put()
方法仍会增加现有的size
变量int
值,并最终会使其超越Java Integer的范围。
最后,为了清楚起见,这是 NOT 一个好主意,因为尝试以这种方式重新利用现有数据结构存在许多陷阱(例如,忘记覆盖其他修改的方法/使用size
变量,程序员错误可能会损害原始数据结构的有效性,或者其他实际变量/副作用,这些变量/副作用从未打算用于处理如此大的大小等。)