Java 如何用一个键存储多个值

Java 如何用一个键存储多个值,java,store,key-value,Java,Store,Key Value,我想在一个键中存储3个值。 Hashmap只能保存1个键,1个值,因此无法使用。 那么,我还需要通过什么方式从一个键中获取值A/B/C呢 关键字:字符串 值:String/String/int其中一种方法是使用ArrayList/Set作为键的值 例如: List myTempList = new ArrayList(); myTempList.add("Hi"); myTempList.add("Hello"); myTempList.add("How are you"); myMap.ke

我想在一个键中存储3个值。 Hashmap只能保存1个键,1个值,因此无法使用。 那么,我还需要通过什么方式从一个键中获取值A/B/C呢

关键字:字符串


值:String/String/int

其中一种方法是使用ArrayList/Set作为键的值

例如:

List myTempList = new ArrayList();
myTempList.add("Hi");
myTempList.add("Hello");
myTempList.add("How are you");

myMap.key("key", myTempList);

另一种方法是,如果您知道每个键的值的数量总是相同的,那么您可以创建一个holder对象,并为该对象设置值,然后将其放入map中。

创建一个对象来保存您的3个值,然后新对象就是您在键-值对中的值

下面是一个示例实现:

class TripleValue {
    String A;
    String B;
    int C;

    public TripleValue(String a, String b, int c) {
        A = a;
        B = b;
        C = c;
    }
}

public static void main() {
    Map<String, TripleValue> myMap = new HashMap<String, TripleValue>(); 
    myMap.put("SomeKey", new TripleValue("String1", "String2", 10));

}
class-TripleValue{
字符串A;
B串;
INTC;
公共三重值(字符串a、字符串b、整数c){
A=A;
B=B;
C=C;
}
}
公共静态void main(){
Map myMap=newhashmap();
myMap.put(“SomeKey”,新的三元组值(“String1”,“String2”,10));
}
试试看

Map m=newhashmap();
然后,您需要检查是否存在密钥列表。如果是,则添加到列表中。否则创建一个ArrayList并添加它

例如:

public add(String key, MyObj myobj){
    if (this.contains(key) ) { 
        this.get(key).add(myObj);
    }else {
        List<MyObject> list = new ArrayList<MyObject>();
        list.add(myObj);
        m.put(key, list);
    }
}
public add(字符串键,MyObj-MyObj){
如果(this.contains(key)){
this.get(key).add(myObj);
}否则{
列表=新的ArrayList();
添加列表(myObj);
m、 放置(键、列表);
}
}

Java框架不支持,有一种解决方法,请参见下文

Map<Object,ArrayList<Object>> multiMap = new HashMap<Object,ArrayList<Object>>();
Map multiMap=newhashmap();

还可以看看这个库

还有(非标准API)多映射实现。。(我不推荐这样做,因为我在记录上打错了字,但要记住的是)我对HashMaps/Maps/List真的很陌生。所以很难理解你讨论的解决方案。我试图理解并举例说明。但我无法找到解决办法。因此,如果有一个完整的工作示例。我可以从中学习,并在那里工作<代码>类三元组{String A;String B;int C;}如果值列表是动态的,这个解决方案可能并不优雅。@Nambari True,但OP将值列为String/String/int非常感谢。只有一个问题。如何返回TripleValue的值?我尝试了迭代器,但这不起作用代码:for(Entry:myMap.entrySet()){System.out.println(Entry.getValue());}您需要将其更改为:System.out.println(Entry.getValue().A)。getValue()仅返回TripleValue对象。然后,您需要访问TripleValue对象的差异属性。使用始终包含3个元素的异类
列表
可能不是一个好主意。@oldrinb:是的,我的理解是,值不是预定义的,如果是,我同意您的说法。使用另一种可能的解决方案更新了答案。在声明的
m
类型之后缺少
。另外,从Java 7开始,您可以允许编译器推断所创建的
HashMap
的参数化类型,即
newhashmap()
yes good point@oldrib。我总是忘记钻石操作员@oldrinb“推断所创建的
HashMap
”的参数化类型是什么意思?使用此功能的代码会是什么样子?@yoshi查找菱形运算符。答案在使用菱形运算符的HashMap声明的末尾
Map<Object,ArrayList<Object>> multiMap = new HashMap<Object,ArrayList<Object>>();