簡體   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