将数组映射到int-Java
我正在尝试将整数和整数数组映射到一个整数值。我知道int[]不能用作键。我试过这个列表,但效果不太好。还有什么我可以做的吗?谢谢 以下是我失败的尝试:将数组映射到int-Java,java,arrays,dictionary,hashmap,Java,Arrays,Dictionary,Hashmap,我正在尝试将整数和整数数组映射到一个整数值。我知道int[]不能用作键。我试过这个列表,但效果不太好。还有什么我可以做的吗?谢谢 以下是我失败的尝试: private void createMap(){ List<Integer> state_action_pair = new ArrayList<Integer>(); for(int i=0;i<this.stateActionTable.length;i++){ for(
private void createMap(){
List<Integer> state_action_pair = new ArrayList<Integer>();
for(int i=0;i<this.stateActionTable.length;i++){
for(int j=0;j<this.stateActionTable[0].length;j++){
state_action_pair.add(this.stateActionTable[i][j]);
}
this.stateActionMap.put(state_action_pair, i);
state_action_pair.clear();
}
}
private void createMap(){
列表状态\操作\对=新建ArrayList();
对于(int i=0;i,您的问题是对Map
的所有键使用一个ArrayList
实例。每个键都需要一个单独的实例:
private void createMap(){
for(int i=0;i<this.stateActionTable.length;i++){
List<Integer> state_action_pair = new ArrayList<Integer>();
for(int j=0;j<this.stateActionTable[0].length;j++){
state_action_pair.add(this.stateActionTable[i][j]);
}
this.stateActionMap.put(state_action_pair, i);
}
private void createMap(){
对于(int i=0;注意,在映射中使用可变数据结构作为键通常是一个很大的禁忌。@aioobe只要OP不改变它们,一切都会正常工作。当然,使用不可变列表会更安全。我必须保存所有这些实例,还是在函数返回后删除它们?thanks@Kenadams它们不是德只要映射没有被删除,就可以删除,因为映射会保留对它们的引用。@Eran那么为什么不阻止列表发生变异,并使用集合。不可修改列表(state\u action\u pair)
作为键?int[]可以用作hashmap的键。另一方面,列表则不行。不清楚您为什么尝试这样做,以及为什么失败。您还忽略了相关信息,什么是stateActionMap?@matt no.An int[]只等于它本身。一个列表与包含相同顺序的相等元素的任何其他列表相同。@JBNizet完全相同。一个列表,.equals将随着时间的推移而改变,使其不适用于hashmap。int[]将保持不变。@matt如果列表没有变异,它不会随着时间的推移而改变。整个要点是能够执行map.get(Arrays.asList(1,2,3))
这是不可能用数组来做的,因为newint[]{1,2,3}
永远不会等于映射中用作键的数组。它不是关于数组或列表,而是关于可变性。HashMap
/HashSet
文档都说,如果修改键,行为是未定义的。如果列表是不可变的,它可以安全地用作键。