Java - 哈希图可以有 4 个通用参数而不是 2 个吗?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/7244100/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Java - Can a hashmap have 4 generic parameters instead of 2?
提问by john
This may be difficult to explain, but here goes:
这可能很难解释,但这里有:
I want to store 3 integers and a String to a Hashmap, so I can retrieve data from the map, but it turns out that hashmaps only allow 2 generic parameters instead of 4.
我想将 3 个整数和一个字符串存储到 Hashmap 中,这样我就可以从地图中检索数据,但事实证明,哈希图只允许 2 个通用参数而不是 4 个。
For example: HashMap <String> <Integer> <Integer> <Integer>
(what I want to do)
例如:(HashMap <String> <Integer> <Integer> <Integer>
我想做什么)
but you can only use 2 parameters, as it seems: HashMap <String> <Integer>
.
但您只能使用 2 个参数,看起来:HashMap <String> <Integer>
.
My best guess is that my idea cannot be done, if so please list the alternatives to handling something like this.
我最好的猜测是我的想法无法实现,如果是这样,请列出处理此类问题的替代方法。
回答by oliholz
Make a new class which holds 3 Integer
or maybe int
.
创建一个包含 3Integer
或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;
}
}
and put this class to a map with the String.
并将这个类放到带有字符串的映射中。
HashMap map = new HashMap<String, Triple>();
map.put("keyString", new Triple(new Integer(1),new Integer(2),new Integer(3)));
回答by Zack Marrapese
You should create an object to hold that data, and then store it like this: HashMap<String, MyObject>
.
您应该创建一个对象来保存数据,然后将其存储这样的:HashMap<String, MyObject>
。
Also, these aren't constructors. They are generics.
此外,这些不是构造函数。它们是泛型。
回答by Ishtar
You don't need a hashmap to store 4 values. To store 3 integers and 1 String:
您不需要哈希图来存储 4 个值。存储 3 个整数和 1 个字符串:
public class MyClass {
int a,b,c;
String d;
}
回答by Ivan
You can get the answer indirectly, like composing the three integer to one character string,
你可以间接得到答案,比如将三个整数组合成一个字符串,
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("_");
Then you can access your integer values.
然后您可以访问您的整数值。
回答by jpstrube
You can use a HashMap< TypeOfYourKey, Object > to store arbitrary objects.
您可以使用 HashMap< TypeOfYourKey, Object > 来存储任意对象。
回答by Vette
I struggled with this same issue. I ended up creating a hashmap of a custom class. This fully worked, and allowed me to put whatever attributes I wanted in my class, and pull out those attributes for any item programmatically. Full example below.
我在同样的问题上挣扎。我最终创建了一个自定义类的哈希图。这完全有效,并允许我在类中放置我想要的任何属性,并以编程方式为任何项目提取这些属性。完整示例如下。
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;
}
}
回答by Micah Hainline
It seems to me that you are trying to store two different types of things as values in the hash map. There is no problem in doing this. Just create the hash map with the default constructor, and then just use Object as the value type. so new HashMap<String, Object>()
在我看来,您试图将两种不同类型的事物作为值存储在哈希映射中。这样做没有问题。只需使用默认构造函数创建哈希映射,然后仅使用 Object 作为值类型。所以new HashMap<String, Object>()