Java 为什么我的hashmap会被最后添加的值覆盖?
我被我的项目打动了。。。必须维护lang数组的大型哈希映射。。。。我尝试了这个样品,但它不工作。。。。我无法将密钥存储在数组中。。。。先谢谢你Java 为什么我的hashmap会被最后添加的值覆盖?,java,hashmap,Java,Hashmap,我被我的项目打动了。。。必须维护lang数组的大型哈希映射。。。。我尝试了这个样品,但它不工作。。。。我无法将密钥存储在数组中。。。。先谢谢你 class K{ int key; } class V{ int data; } class hashmp{ public static void main(String args[]){ HashMap<K,V> hm=new HashMap<K,V>(); K key1=new K(
class K{
int key;
}
class V{
int data;
}
class hashmp{
public static void main(String args[]){
HashMap<K,V> hm=new HashMap<K,V>();
K key1=new K();
for(int i=0;i<5;i++){
V val=new V();
key1.key=i;
val.data=i+5;
hm.put(key1,val);
}
System.out.println();
for(int i=0;i<5;i++){
key1.key=i;
V pt=hm.get(key1);
System.out.println("\n"+hm.containsKey(key1)+key1.key);
if(hm.containsKey(key1))
System.out.print(pt.data);
}
}
}
更新的代码
class K{
long key;
}
class V{
long[] v=new long[10];
}
public void putHash(V val1){
//some code
V s=new V();
K gt=new K();
gt.key=val1.v[0];
if(hm.containsKey(keyArr[(int)gt.key])){
s=hm.get(gt); //get value of key if exists
//some code to modify s
}
gt.key=val1.v[0];
hm.put(gt,s); // put the modified value back to same key
}
谢谢大家为我提供答案。。。最后它工作得很好。。。感谢大家的贡献……HashMap存储密钥的引用。因此,如果您更改密钥,它将在HashMap中更改。如果要更改此选项,请移动station
K key1=new K()代码>在for循环内。首先执行以下操作:
HashMap<K, V> hm = new HashMap<K, V>();
K key1 = null;
for (int i = 0; i < 5; i++) {
key1 =new K();
V val = new V();
key1.key = i;
val.data = i + 5;
hm.put(key1, val);
}
您将得到正确的值
或者,您也可以参考此答案,了解如何遍历键或值
给我一些反馈
希望有帮助 您在每次循环迭代中使用相同的kkey1
对象,并且您正在修改相同的对象,即使它已经在映射中。您需要为映射中的每个条目创建一个不同的键K
(或者直接使用Integer
,而不是创建您自己的键类,它至少需要一个equals
和hashCode
),或者,如果您正在按顺序编号,只需要一个数组:V vals[]
对于您在地图中放置的每个条目,您必须实例化该键,否则您的最后一个条目将被覆盖。您只有一个key
类的实例,因此它们都相等(默认实现equals
方法的第一个条件是相同的对象)。在循环中移动newkey()
,一切都会正常进行(顺便说一句,为映射键重写equals
方法要好得多)。这是否足以使用get()方法查找我的条目。。。。我想检索特定键的数据……他一直使用同一个键对象;地图中只有一个条目,这会让他进行迭代,所以它回答了问题,但是因为他在他的键上使用了引用相等,所以他在进行任何查找时都会遇到困难;在这类问题上,如果可以的话,回答基本问题(在本例中,编写他自己的int
wrapper)是很有帮助的。我必须为每个键存储长数组作为hashmap的值。。。。HashMap hm=新的HashMap。。。我还想修改数组中的单个元素(例如:要在一个键下单独修改的数据[3]),并将它们存储回hashmap中。。。。迭代器在这种情况下有用吗。。。。提前谢谢。。
HashMap<K, V> hm = new HashMap<K, V>();
K key1 = null;
for (int i = 0; i < 5; i++) {
key1 =new K();
V val = new V();
key1.key = i;
val.data = i + 5;
hm.put(key1, val);
}
Iterator it = hm.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pairs = (Map.Entry)it.next();
System.out.println(((K)pairs.getKey()).key + " = " + ((V)pairs.getValue()).data);
it.remove(); // avoids a ConcurrentModificationException
}