如何使用循环从StringBuilder将键/值放入HashMap? - Java

时间:2014-12-11 09:25:29

标签: java hashmap

我在这里使用了几种技术,因此很难在网上找到帮助。 我需要使用HashMap<String, String>的一部分填充StringBuilder,然后取出密钥并将其添加到ArrayList<String>中,然后打印列表。但是当我打印时,我得到一个满是nulls的列表。我不知道为什么,我认为它会打印我从StringBuilder得到的值。它应该打印:Values taken from the hashmap keys: ABCDEFGHI。 (我使用StringBuilder的原因是因为String是不可变的,这也是正确的想法吗?)

另外,我认为使用循环打印列表是可以的,因为我的密钥实际上是数字。

我之前从未创建过HashMap,所以也许我错过了一些东西。谢谢你的帮助。

这是我的代码:

    // create HashMap from String
    StringBuilder alphaNum = new StringBuilder("1A2B3C4D5E6F7G8H9I");

    Map<String, String> myAlphaNum = new HashMap<String, String>(9);

    // for loop puts key and values in map, taken from String
    for (int i = 0; i < alphaNum.length();)
    {
        myAlphaNum.put(alphaNum.substring(i, ++i), alphaNum.substring(i, ++i));
    }
    if (myAlphaNum.containsKey(1))
        System.out.println("Key is there.");
    else
        System.out.println("Key is null.");

    // create ArrayList, add values to it using map keys
    ArrayList<String> arrayList = new ArrayList<String>();

    // for loop gets the "number" keys from HashMap to get the "letter" values
    for (int j = 1; j <= myAlphaNum.size(); j++)
        arrayList.add(myAlphaNum.get(j));


    System.out.print("Values taken from the hashmap keys: ");
    for (String list : arrayList)
        System.out.print(list);

控制台:

Key is null.

Values taken from the hashmap keys: nullnullnullnullnullnullnullnullnull

3 个答案:

答案 0 :(得分:1)

myAlphaNum具有String类型的键,因此将int传递给getmyAlphaNum.get(j))将始终返回null。

有几种方法可以迭代地图的值(或键或条目)。

例如(假设您只关心值):

for (String value : myAlphaNum.values())
    arrayList.add(value);

答案 1 :(得分:1)

 // create HashMap from String
        StringBuilder alphaNum = new StringBuilder("1A2B3C4D5E6F7G8H9I");

        Map<String, String> myAlphaNum = new HashMap<String, String>(9);

        // for loop puts key and values in map, taken from String
        for (int i = 0; i < alphaNum.length();)
        {
            myAlphaNum.put(alphaNum.substring(i, ++i), alphaNum.substring(i, ++i));
        }

        System.out.println(myAlphaNum);
        if (myAlphaNum.containsKey(1))
            System.out.println("Key is there.");
        else
            System.out.println("Key is null.");

        // create ArrayList, add values to it using map keys
        ArrayList<String> arrayList = new ArrayList<String>();

        // for loop gets the "number" keys from HashMap to get the "letter" values
        for (int j = 1; j <= myAlphaNum.size(); j++)
            arrayList.add(myAlphaNum.get(j+""));


        System.out.print("Values taken from the hashmap keys: ");
        for (String list : arrayList)
            System.out.print(list);

您可以尝试上面的代码。你在重读Integer时使用了字符串键位,所以它不会返回任何东西。

答案 2 :(得分:1)

您正在使用包含Integer作为参数的containsKey / get,而您的地图键被定义为String。这就是你得到null的原因。

我建议您在循环Map<Integer, String> myAlphaNum = new HashMap<Integer, String>(9);中使用myAlphaNum.put(Integer.parseInt(alphaNum.substring(i, ++i)), alphaNum.substring(i, ++i));。然后你就会得到你想要的输出。

您也可以直接将ArrayList作为参数(或只是sysout Collection)的myAlphaNum.values()构造函数。

// create ArrayList, add values to it using map keys
ArrayList<String> arrayList = new ArrayList<String>(myAlphaNum.values());
System.out.println(arrayList); //[A, B, C, D, E, F, G, H, I]