通过比较LinkedHashMap中的值来获取密钥

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过比较LinkedHashMap中的值来获取密钥相关的知识,希望对你有一定的参考价值。

  1. 我创建了一个名为(ObjClass)的自定义类。
  2. 我在LinkedHashMap中插入自定义类名而不是值。如下: LinkedHashMap map = new <> LinkedHashMap;
  3. 我在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中的值来获取密钥的主要内容,如果未能解决你的问题,请参考以下文章

通过替换给定列的值来显示表中的行

通过比较两个输入字段中的值来启用/禁用元素

LinkedHashMap和HashMap的比较使用

我想通过匹配来自 mongo 数据库的值来选中复选框

页面载入时通过获取GridView某行某列的值来控制某一列的控件属性

从地图中获取密钥及其特定值