Java-hashmap可以有4个通用参数而不是2个?

Java-hashmap可以有4个通用参数而不是2个?,java,hash,hashmap,Java,Hash,Hashmap,这可能很难解释,但下面是: 我想将3个整数和一个字符串存储到Hashmap中,这样我就可以从映射中检索数据,但结果表明Hashmap只允许2个通用参数,而不是4个 例如:HashMap(我想做的事情) 但您只能使用两个参数,就像它看起来的那样:HashMap 我最好的猜测是,我的想法无法实现,如果是这样,请列出处理类似内容的替代方案。您应该创建一个对象来保存该数据,然后像这样存储:HashMap 而且,这些不是构造函数。它们是泛型。创建一个新类,其中包含3个Integer或int class T

这可能很难解释,但下面是:

我想将3个整数和一个字符串存储到Hashmap中,这样我就可以从映射中检索数据,但结果表明Hashmap只允许2个通用参数,而不是4个

例如:
HashMap
(我想做的事情)

但您只能使用两个参数,就像它看起来的那样:
HashMap


我最好的猜测是,我的想法无法实现,如果是这样,请列出处理类似内容的替代方案。

您应该创建一个对象来保存该数据,然后像这样存储:
HashMap


而且,这些不是构造函数。它们是泛型。

创建一个新类,其中包含3个
Integer
int

class Triple {
    Integer i;
    Integer j;
    Integer k;

    Triple(Integer i,Integer j, Integer k) {
        this.i = i;
        this.j = j;
        this.k = k;
    }
}
并将该类放入带有字符串的映射中

HashMap map = new HashMap<String, Triple>();
map.put("keyString", new Triple(new Integer(1),new Integer(2),new Integer(3)));
HashMap map=newhashmap();
put(“键串”、新三元组(新整数(1)、新整数(2)、新整数(3));

在我看来,您正在尝试将两种不同类型的内容作为值存储在哈希映射中。这样做没有问题。只需使用默认构造函数创建哈希映射,然后使用Object作为值类型。因此
newhashmap()

您可以间接获得答案,就像将三个整数组合成一个字符串

int val1=1;
int val2=2;
int val3=3;
Map<String,String> test = new HashMap<String,String>();
test.put("key1", val1+"_"+val2+"_"+val3);
when you wan to get the values, int[] rst = test.get("key1).split("_");
int-val1=1;
int-val2=2;
int val3=3;
Map test=newhashmap();
测试。输入(“键1”,val1+“”+val2+“”+val3);
当您想要获取这些值时,int[]rst=test.get(“key1.split”(“”);

然后您可以访问整数值。

您可以使用HashMap来存储任意对象。

您不需要HashMap来存储4个值。要存储3个整数和1个字符串:

public class MyClass {
  int a,b,c;
  String d;
}

我也遇到了同样的问题。我最终创建了一个自定义类的hashmap。这完全有效,允许我在类中放置我想要的任何属性,并以编程方式为任何项提取这些属性。下面是完整的示例

public class Test1 {


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.addview);


//create the data mapping
    HashMap<Integer, myClass> hm = new HashMap<Integer, myClass>();
    hm.put(1, new myClass("Car", "Small", 3000));
    hm.put(2, new myClass("Truck", "Large", 4000));
    hm.put(3, new myClass("Motorcycle", "Small", 1000));



//pull the datastring back for a specific item.
//also can edit the data using the set methods.  this just shows getting it for display.
    myClass test1 = hm.get(1);
    String testitem = test1.getItem();
    int testprice = test1.getPrice();
    Log.i("Class Info Example",testitem+Integer.toString(testprice));

}

}








class myClass{
    private String item;
    private String type;
    private int price;


    public myClass(String itm, String ty, int pr){
        this.item = itm;
        this.price = pr;
        this.type = ty;
    }

    public String getItem() {
        return item;
    }

    public void setItem(String item) {
        this.item = item;
    }

    public String getType() {
        return item;
    }

    public void setType(String type) {
        this.type = type;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

}
公共类Test1{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.addview);
//创建数据映射
HashMap hm=新的HashMap();
hm.put(1,新myClass(“汽车”,“小型”,3000));
hm.put(2,新myClass(“卡车”,“大型”,4000));
hm.put(3,新myClass(“摩托车”,“小型”,1000));
//将特定项的数据字符串向后拉。
//也可以使用set方法编辑数据。这只是显示如何获取数据以供显示。
myClass test1=hm.get(1);
字符串testitem=test1.getItem();
int testprice=test1.getPrice();
Log.i(“类信息示例”,testitem+Integer.toString(testprice));
}
}
类myClass{
私有字符串项;
私有字符串类型;
私人int价格;
公共myClass(字符串itm、字符串ty、整数pr){
本项目=itm;
这个价格=pr;
this.type=ty;
}
公共字符串getItem(){
退货项目;
}
公共void集合项(字符串项){
this.item=项目;
}
公共字符串getType(){
退货项目;
}
公共void集合类型(字符串类型){
this.type=type;
}
public int getPrice(){
退货价格;
}
公共无效设置价格(整数价格){
这个价格=价格;
}
}

您到底想映射什么?字符串到所有整数?为了澄清,您引用了HashMap的通用参数,其中有两个,K和V。但是实际上有4个构造函数。使用上面提到的方法,您如何获取keySet?System.out.println(map.values())的值将打印出类似于这个utils的内容。Triple@5e1fc2aa
map.values()
为您提供一个
集合
。对于每个三元组,您可以直接访问
i、j、k
,也可以提供一个getter方法。如果要打印
三元组
,可以覆盖
公共字符串toString()
方法。