[英]How to put/get values into/from Nested HashMap
我想創建一個嵌套的 HashMap,它將采用兩個 float 類型的鍵並給出 Integer 類型的值。
public static HashMap<Float, HashMap<Float, Integer>> hashX = new HashMap<Float,HashMap<Float, Integer>>();
是否有像普通 HashMap 那樣放置/獲取值的簡單方法,即
hashX.put(key, value);
hashX.get(key);
還是必須使用更復雜的方法? 我在網上搜索了一個解決方案,但發現很難找到適合我的解決方案。 任何幫助,將不勝感激!
Map<Float, Map<Float, Integer>> map = new HashMap<>();
map.put(.0F, new HashMap(){{put(.0F,0);}});
map.put(.1F, new HashMap(){{put(.1F,1);}});
map.get(.0F).get(.0F);
您必須從外部映射中get()
嵌套映射,並且調用可以在其上調用put()
和get()
float x = 1.0F;
HashMap<Float, Integer> innerMap = hashX.get(x);
if (innerMap == null) {
hashX.put(x, innerMap = new HashMap<>()); // Java version >= 1.7
}
innerMap.put(2.0F, 5);
您可以使用如下方法創建包裝類:
public class MyWrapper {
private Map<Float, Map<Float, Integer>> hashX;
// ...
public void doublePut(Float one, Float two, Integer value) {
if (hashX.get(one) == null) {
hashX.put(one, new HashMap<Float, Integer>());
}
hashX.get(one).put(two, value);
}
}
請注意,在聲明字段時,您應該使用接口而不是具體實現。 例如,如果需要,將HashMap
重構為ConcurrentHashMap
會更容易。
你可以這樣做:
HashMap<Float, Integer> h1 = new HashMap<Float, Integer>();
h1.put(1.0f,new Integer(1));
HashMap<Float, Integer> h2 = new HashMap<Float, Integer>();
h2.put(3.0f,new Integer(3));
hashX.put(1.0f, h1);
hashX.put(1.0f, h1);
嘗試這個。
static <K0, K1, V> void put(Map<K0, Map<K1, V>> map, K0 k0, K1 k1, V value) {
map.computeIfAbsent(k0, x -> new HashMap<>()).put(k1, value);
}
static <K0, K1, V> V get(Map<K0, Map<K1, V>> map, K0 k0, K1 k1) {
return Optional.ofNullable(map.get(k0)).map(s -> s.get(k1)).orElse(null);
}
和
Map<Float, Map<Float, Float>> map = new HashMap<>();
put(map, 1F, 2F, 3F);
put(map, 4F, 5F, 6F);
System.out.println(map);
輸出:
{4.0={5.0=6.0}, 1.0={2.0=3.0}}
或者干脆
Map<Float, Map<Float, Float>> map = Map.of(
1F, Map.of(2F, 3F),
4F, Map.of(5F, 6F));
我想創建一個嵌套的 HashMap,它將采用兩個 float 類型的鍵並給出 Integer 類型的值。
您不需要嵌套 Map 。 如果您想使用復合鍵進行查找,最好將您的映射聲明為這樣。 JFK 中沒有好的Pair
類,但您可以使用Map.Entry
,這有點不方便使用但有效:
Map<Map<Float, Float>, Integer> map = new ....
有關創建Map.Entry
實例的信息,請參閱https://stackoverflow.com/a/3110563/18573
package com.Collection;
import java.util.*;
public class India {
public static void main(String[] args) {
Set s = new TreeSet();
s.add("Barshi");
s.add("Pandharpur");
s.add("Kurduwadi");
s.add("Vairag");
Map<String,Map<String,Map<String,TreeSet>>> map =
Map.of("India", Map.of("Maharashtra", Map.of("Solapur", new TreeSet(s))));
System.out.println(map);
System.out.println(map.get("India").get("Maharashtra").get("Solapur").contains("Barshi"));
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.