HashMap:一键,多个值

Sun*_*een 65 java

我如何获得此地图中第一个键的第三个值?这可能吗?

sol*_*dil 81

图书馆存在要做到这一点,但最简单的普通的Java方法是创建一个MapList是这样的:

Map<Object,ArrayList<Object>> multiMap = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)

  • 但是,使用库可能比滚动自己更简单,测试它等... (4认同)
  • 从键盘转了5秒钟和繁荣......别人发布了相同的答案.+1 (3认同)

Jon*_*eet 29

听起来你正在寻找一个多图.Guava有各种Multimap实现,通常是通过Multimaps类创建的.

我建议使用该实现可能比滚动自己更简单,计算API应该是什么样子,在添加值时仔细检查现有列表等.如果您的情况特别厌恶第三方库它可能值得这样做,但除此之外,Guava是一个神话般的库,它可能会帮助你使用其他代码:)


jfa*_*zio 22

例如:

Map<Object,Pair<Integer,String>> multiMap = new HashMap<Object,Pair<Integer,String>>();
Run Code Online (Sandbox Code Playgroud)

其中Pair是参数类

public class Pair<A, B> {
    A first = null;
    B second = null;

    Pair(A first, B second) {
        this.first = first;
        this.second = second;
    }

    public A getFirst() {
        return first;
    }

    public void setFirst(A first) {
        this.first = first;
    }

    public B getSecond() {
        return second;
    }

    public void setSecond(B second) {
        this.second = second;
    }

}
Run Code Online (Sandbox Code Playgroud)


Neo*_*Neo 11

这是我在类似问题的答案中找到的

Map<String, List<String>> hm = new HashMap<String, List<String>>();
List<String> values = new ArrayList<String>();
values.add("Value 1");
values.add("Value 2");
hm.put("Key1", values);

// to get the arraylist
System.out.println(hm.get("key1"));
Run Code Online (Sandbox Code Playgroud)

结果:[值1,值2]


oop*_*ase 9

你有这样的东西吗?

HashMap<String, ArrayList<String>>
Run Code Online (Sandbox Code Playgroud)

如果是这样,您可以遍历您的ArrayList并使用arrayList.get(i)获取您喜欢的项目.

  • 如何将元素添加到arraylist并迭代 (3认同)

And*_*bbs 8

标准Java HashMap无法为每个键存储多个值,您添加的任何新条目都将覆盖前一个.


小智 7

我在随机搜索上找到了博客,我认为这将有助于做到这一点:http : //tomjefferys.blogspot.com.tr/2011/09/multimaps-google-guava.html

public class MutliMapTest {
public static void main(String... args) {
   Multimap<String, String> myMultimap = ArrayListMultimap.create();

   // Adding some key/value
   myMultimap.put("Fruits", "Bannana");
   myMultimap.put("Fruits", "Apple");
   myMultimap.put("Fruits", "Pear");
   myMultimap.put("Vegetables", "Carrot");

   // Getting the size
   int size = myMultimap.size();
   System.out.println(size);  // 4

   // Getting values
   Collection<String> fruits = myMultimap.get("Fruits");
   System.out.println(fruits); // [Bannana, Apple, Pear]

   Collection<string> vegetables = myMultimap.get("Vegetables");
   System.out.println(vegetables); // [Carrot]

   // Iterating over entire Mutlimap
   for(String value : myMultimap.values()) {
      System.out.println(value);
   }

   // Removing a single value
   myMultimap.remove("Fruits","Pear");
   System.out.println(myMultimap.get("Fruits")); // [Bannana, Pear]

   // Remove all values for a key
   myMultimap.removeAll("Fruits");
   System.out.println(myMultimap.get("Fruits")); // [] (Empty Collection!)
}
}
Run Code Online (Sandbox Code Playgroud)


小智 5

尝试使用集合来存储密钥的值:

Map<Key, Collection<Value>>
Run Code Online (Sandbox Code Playgroud)

你必须自己维护价值表