繁体   English   中英

具有长值的哈希图

[英]Hash map with long values

我想创建一个哈希映射类型的对象映射Element ,以long价值。 到目前为止,我所做的是:

class Element {
  public int x;
  public int y;
}
public class HelloWorld
{
  public static void main(String[] args)
  {
    HashMap<Element, Integer> marks = new HashMap<Element, Integer>();
    Element e = new Element();
  }
}

从我看到的内容来看, Integer是一个包装,将一个int转换为一个int类型的Object 我怎么能long做同样的事情?

我怎么能long做同样的事情?

所有原语都有对应的包装器类:

Primitive type  Wrapper class
boolean         Boolean
byte            Byte
char            Character
float           Float
int             Integer
long            Long
short           Short
double          Double

Java Docs

您可以使用Long ,这是Long的对象(包装)版本。 Java通过自动装箱自动为您处理此转换。

请参阅文档以获取更多信息: https : //docs.oracle.com/javase/tutorial/java/data/autoboxing.html

另一种方法是使用fastutil库。 在标准的Java容器中使用和存储小对象(例如您的情况)可能效率不高。 该库通过为所有原始类型提供单独的容器实现来解决此问题。

您可以使用Object2LongOpenHashMap

更好的是,由于密钥只有8个字节长,因此可以将xy融合为单个long原语,并使用Long2LongOpenHashMap (或Long2LongArrayMap)。 像这样:

void put(Long2LongOpenHashMap map, Element key, long value) {
  long k = ((long)key.x << 32) | key.y;
  map.put(k, value);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM