簡體   English   中英

使用哪種數據結構(在JAVA中)與3組鍵以隨機順序使用

[英]What Data Structure to use (in JAVA) with 3 sets of keys in random order

我有3組鍵:一個是類型,另一個是子類型,最后一個是ID,值是ProductObj。 最初,我想將ProductObj存儲在HashMap的HashMap的HashMap中( HashMap<type, HashMap<subtype, HashMap<ID, prodObj>>> ),以加快搜索速度(希望將其設計為Cache而不是從數據庫中不斷獲取) )。 [注意:productObj的數量是固定的]但是,我了解到50%的時間中,我可能只會獲得ID而不是類型/子類型,另外50%是類型/子類型,但沒有ID。 什么樣的數據結構才能滿足此目的?

我想到了HashMap<type, HashMap<subtype, HashMap<ID, uuid>>>和另一個HashMap<uuid, prodObj> ,但是我希望在數據結構方面找到更好的解決方案。 提前致謝!

[附加信息]

這就是希望存儲的內容{type = 1 subtype = 1 id = 1 = prodObj1,type = 1 subtype = 1 id = 2 = prodObj2,...}

當給定id時:例如id = 1,則返回prodObj1

當給定類型時:例如,type = 1,則返回prodObj1和prodObj2

當給出type和subtype時:例如type = 1 subtype = 1,則同時返回prodObj1和prodObj2

當給出類型,子類型和id時:例如,type = 1子類型= 1 id = 1,則返回prodObj1

我希望利用類似HashMap的數據結構來基於鍵值進行更快的搜索,因為我將訪問緩存並經常更改prodObj狀態。

為什么要使用嵌套地圖?

如果您不操作地圖中的大量值,則可以將定義復合鍵(類型,子類型和id)的自定義類用作鍵。

通過這種方式,您可以在獲取或插入該復合鍵的實例時將其傳遞給地圖。

public class ProductKey{

  private Long id;
  private string type;
  private string subType;

  private ProductKey(){
  }

  public static ProductKey ofWithId(Long id){
    ProductKey productKey = new ProductKey();
    productKey.id = id;  
    return productKey;
  }
   ...
  // other factory methods
   ...
  // equals and hashcode overriden of course
}

您可以通過以下方式實例化並填充地圖:

Map<ProductKey, ProductObj> map = new HashMap<>();
map.put(ProductKey.ofWithId(1), myProductObj);
map.put(ProductKey.ofWithTypeAndSubType("type", "subtype"), anotherProductObj);
 ...

並以這種方式檢索元素:

 ProductObj retrievedObj = map.get(ProductKey.ofWithId(1));

我建議使用單個HashMap。 將地圖的鍵設置為三個值的組合。

最簡單的將是使用分隔符的String,該分隔符將不會在任何值中使用。 例如,使用Java 8:

String key = String.join(":", type, subType, id) ;
productMap.put(key, product) ;

join方法是空安全的,因此如果缺少這些值就可以了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM