通过比较LinkedHashMap中的值来获取密钥
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过比较LinkedHashMap中的值来获取密钥相关的知识,希望对你有一定的参考价值。
- 我创建了一个名为(ObjClass)的自定义类。
- 我在LinkedHashMap中插入自定义类名而不是值。如下: LinkedHashMap map = new <> LinkedHashMap;
- 我在ObjClass中有以下getter和setter,名字是 私有字符串名称; 私人国际水平; private String parent;
现在问题是当我试图通过比较特定字段来获取密钥时,它没有执行。
我的代码如下:
public class Practice {
LinkedHashMap<Integer,ObjClass> map = new LinkedHashMap<>();
public void addd(){
int a = 10;
int b = 20;
int c = 30;
ObjClass bb = new ObjClass();
bb.setName("COLOR");
bb.setParent("ROOT");
bb.setLevel(1);
bb.getName();
bb.getParent();
bb.getLevel();
map.put(a, bb);
bb.setName("RED");
bb.setParent("COLOR");
bb.setLevel(2);
bb.getName();
bb.getParent();
bb.getLevel();
map.put(b, bb);
bb.setName("WHITE");
bb.setParent("COLOR");
bb.setLevel(2);
bb.getName();
bb.getParent();
bb.getLevel();
map.put(c, bb); here
// the problem is in the for loop i try to get the key of "red" which is 20 but my loop is not working..
for (Map.Entry<Integer, ObjClass> entry : map.entrySet()) {
if(entry.getValue().getName().equals("RED"))
{
System.out.println("yes"+ entry.getKey());
}
}
System.out.println(" "+map.size());
}
public static void main(String[] args) {
Practice pp = new Practice();
pp.addd();
}}
答案
因为你只有一个ObjClass
实例,它的名字被覆盖为WHITE
另一答案
您只为LinkedHashMap的所有输入提供单个实例。检查更新的代码。
import java.util.LinkedHashMap;
import java.util.Map;
public class Main {
Map<Integer, ObjClass> lMap = new LinkedHashMap<>();
public void addd(){
int a = 10;
int b = 20;
int c = 30;
ObjClass bb = new ObjClass();
bb.setName("COLOR");
bb.setParent("ROOT");
bb.setLevel(1);
bb.getName();
bb.getParent();
bb.getLevel();
lMap.put(a, bb);
bb = new ObjClass();
bb.setName("RED");
bb.setParent("COLOR");
bb.setLevel(2);
bb.getName();
bb.getParent();
bb.getLevel();
lMap.put(b, bb);
bb = new ObjClass();
bb.setName("WHITE");
bb.setParent("COLOR");
bb.setLevel(2);
bb.getName();
bb.getParent();
bb.getLevel();
lMap.put(c, bb);
// the problem is in the for loop i try to get the key of "red" which is 20 but my loop is not working..
for (Map.Entry<Integer, ObjClass> entry : lMap.entrySet()) {
//System.out.println(entry.getKey() + "-" + entry.getValue().getName());
if(entry.getValue().getName().equals("RED"))
{
System.out.println("yes"+ entry.getKey());
}
}
System.out.println(" "+lMap.size());
}
public static void main(String[] args) {
Main pp = new Main();
pp.addd();
}
}
您需要再次初始化它。
bb = new ObjClass();
另一答案
在Java中,所有对象变量都是引用。结果你的bb变量被最后一个值改变了。请参阅更正后的代码如下:
import java.util.LinkedHashMap;
import java.util.Map;
public class Practice {
LinkedHashMap<Integer, ObjClass> map = new LinkedHashMap<>();
public void addd() {
int a = 10;
int b = 20;
int c = 30;
ObjClass bb = new ObjClass();
bb.setName("COLOR");
bb.setParent("ROOT");
bb.setLevel(1);
bb.getName();
bb.getParent();
bb.getLevel();
map.put(a, bb);
bb = new ObjClass();
bb.setName("RED");
bb.setParent("COLOR");
bb.setLevel(2);
bb.getName();
bb.getParent();
bb.getLevel();
map.put(b, bb);
bb = new ObjClass();
bb.setName("WHITE");
bb.setParent("COLOR");
bb.setLevel(2);
bb.getName();
bb.getParent();
bb.getLevel();
map.put(c, bb);
// the problem is in the for loop i try to get the key of "red" which is
// 20 but my loop is not working..
for (Map.Entry<Integer, ObjClass> entry : map.entrySet()) {
if (entry.getValue().getName().equals("RED")) {
System.out.println("yes" + entry.getKey());
}
}
System.out.println(" " + map.size());
}
public static void main(String[] args) {
Practice pp = new Practice();
pp.addd();
}
}
还看到Is Java “pass-by-reference” or “pass-by-value”?
以上是关于通过比较LinkedHashMap中的值来获取密钥的主要内容,如果未能解决你的问题,请参考以下文章