Java 具有重复密钥的高效内存键值存储

Java 具有重复密钥的高效内存键值存储,java,hashmap,Java,Hashmap,我需要这样的东西: SomeMap someMap= new someArray; someArray.put("color","red"); someArray.put("color","black"); someArray.put("brand","coca-cola") someArray.put("brand","pepsi") 我不管订单是什么。 以下是我需要的方法: 输入键和值: someArray.put("color","red"); 按键获取: someArray.get(

我需要这样的东西:

SomeMap someMap= new someArray;
someArray.put("color","red");
someArray.put("color","black");
someArray.put("brand","coca-cola")
someArray.put("brand","pepsi")
我不管订单是什么。 以下是我需要的方法:

输入键和值:

someArray.put("color","red");
按键获取:

someArray.get("color");
获取全部:

someArray.getAll();
删除所有:

someArray.removeAll();
我还需要能够复制结构:

someMap2 = someMap; (not shallow copy)

我该怎么做呢?

您问题中关于允许“重复键”的部分让我想到您真正想要的是a,其中一个给定键可以映射到多个值。谷歌在他们的库中有这个,或者你可以用一个值为列表实现的地图来滚动你自己的。这是一个例子

宣言可以是这样的:

 Map<String, List<String>> map = new HashMap<String, List<String>>()

如果您希望在没有任何外部依赖项的情况下实现此功能,那么您只需要以下代码

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MultiValueMap {

    private static final Map<String, List<String>> map = new HashMap<String, List<String>>();

    public static void main(String[] args) {
        put("color", "red");
        put("color", "black");
        put("brand", "coca-cola");
        put("brand", "pepsi");

        System.out.println(get("color"));
        System.out.println(get("brand"));
    }

    public static List<String> get(String key) {
        return map.get(key);
    }

    public static void put(String key, String value) {
        if (map.get(key) == null) {
            map.put(key, new ArrayList<>());
        }
        map.get(key).add(value);
    }

}

听起来像是家庭作业?你为什么不使用HashMap呢?我试着这么做,但我总是坚持复制这个数组而不为他保存实例。例如,我有一个hashmap,我需要将它复制到另一个hashmap。你知道数组和映射之间的区别吗?如果你有重复的键,你的结构不能是hashmap,除非你将值作为数组添加。你需要一份清单。我试着和番石榴一起工作,但图书馆太大了,所以我试着找到其他的东西,所以你自己动手吧,正如我在回答的第二部分所建议的。我将更新以包含一个示例。我尝试过这样做,但当我需要复制此hashmap时出现了一个问题:Map Map=new hashmap Map mapCopy=new hashmap Map=copyMap;我在地图上做的任何改变也会改变复制地图我怎么能复制而不改变他?是什么让你认为声明一个名为mapCopy的新变量并初始化它就足以复制旧地图的内容呢?关于Guava的库太大的部分听起来不诚实。对什么来说太大了?在javax中?不确定这是他想要的……您可以简化它,只使用一个map.getkey操作