11

我想创建一个嵌套的 HashMap,它将采用两个浮点类型的键并给出整数类型的值。

 public static HashMap<Float, HashMap<Float, Integer>> hashX = new HashMap<Float,HashMap<Float, Integer>>();

是否有一种简单的方法可以像普通的 HashMap 一样放置/获取值,即

  hashX.put(key, value);
  hashX.get(key);

还是必须使用更复杂的方法?我在网上搜索了解决方案,但发现很难找到适用于我的解决方案。任何帮助,将不胜感激!

4

7 回答 7

12
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);
于 2013-01-29T12:35:58.500 回答
5

您必须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);
于 2013-01-29T12:15:54.583 回答
2

您可以使用如下方法创建包装类:

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

于 2013-01-29T12:19:32.230 回答
1

你可以这样做:

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);
于 2013-01-29T12:16:41.213 回答
1

试试这个。

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));
于 2020-07-17T18:59:26.740 回答
0

我想创建一个嵌套的 HashMap,它将采用两个浮点类型的键并给出整数类型的值。

不需要一个嵌套的 Map 。如果您想使用复合键进行查找,最好将您的地图声明为这样。PairJFK中没有一个好的课程,但你可以使用Map.Entry,这有点不方便使用但有效:

Map<Map<Float, Float>, Integer> map = new ....

有关创建实例,请参阅https://stackoverflow.com/a/3110563/18573Map.Entry

于 2013-01-29T15:33:54.717 回答
-3
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"));
    }

}
于 2021-07-24T16:11:08.723 回答