HashMap只存储一个条目

时间:2017-09-24 22:59:34

标签: java hashmap

我正在使用这样的二进制字符串:

  

010010010000110100001010

作为String,将其转换为Integer Array,如下所示:

int[] DD = new DD[binString.length()];
       char temp = binString.charAt(i);
        int binData = Character.getNumericValue(temp);
        DD[i] = binData;

我想把这些Integer值保存到HashMap中(我必须按照给我的指示存储到HashMap中),如下所示:

Map<String, Integer> toMemory = new HashMap<String, Integer>();

    for(int i=0;i<binString.length();i++) {
        char temp = binString.charAt(i);
        int binData = Character.getNumericValue(temp);
        DD[i] = binData;
        if((DD[i] & (DD[i]-1) ) == 0) {
            toMemory.put(new String("ON"), new Integer(DD[i]));
        } else {
            toMemory.put(new String("ON"), new Integer(DD[i]));
        }
    }
    for(String s: toMemory.keySet()) {
        if(s.startsWith("ON")) {
            System.out.println(toMemory.get(s));
        }
    }

我面临的问题是,HashMap中只存储了一个条目,比如{&#34; ON&#34;,0}。并且没有存储其他值。我的预期输出是:

  

{&#34; ON&#34; ,1,&#34; OFF&#34; ,0,&#34; ON&#34; ,1 .........}

有没有更好的方法来存储值以获得我的预期输出?任何帮助将不胜感激。

P.S:请忽略重复的代码,而且我对编程相对较新。

2 个答案:

答案 0 :(得分:0)

您对Map的使用存在缺陷。地图采用唯一键并返回值。 您正在尝试使用重复键。相反,请查看使用包含类的List

class ClassName {
   public String status;
   public int value; 
   public ClassName(String status, int value){
       this.status = status;
       this.value = value;
   }
}

List<ClassName> list = new ArrayList();

要添加到列表,请创建班级的新实例并致电List#add

list.add(new ClassName("ON", 1));

答案 1 :(得分:0)

正如Infuzed Guy所说,你正在以错误的方式使用Map。它是价值映射的独特关键&#34;。 只要您使用相同的密钥多次并希望存储所有dada,就需要使用List

以下是我能提出的一点:test it here



    import java.util.LinkedList;
    import java.util.List;

    class Main {
        public static void main(String[] args) {

            class Tuple<X, Y> {    //The wrapper object
                public final X x;
                public final Y y;

                public Tuple(X x, Y y) {    //Object constructor
                    this.x = x;
                    this.y = y;
                }

                public String toString()    //Here for printing purpose
                {
                    return "\"" + this.x + "\", " + this.y;
                }
            }

            //Note here te use of List
            List<Tuple> toMemory = new LinkedList<>();

            String binString = "10100100101100101011";
            int[] DD = new int[binString.length()];

            for(int i=0; i < binString.length(); ++i)
            {
                //Here I use the char value 
                //to get the by subtraction
                DD[i] = binString.charAt(i) - '0';
                if(DD[i] == 1)    //Simple check with the int value
                {
                    toMemory.add(new Tuple<>("ON", DD[i]));
                }
                else
                {
                    toMemory.add(new Tuple<>("OFF", DD[i]));
                }
            }

            //Print the List
            System.out.print("{ ");
            for(Tuple s: toMemory) {
                System.out.print(s +", ");
            }
            System.out.println("}");
        }
    }