[英]How to put key/values into a HashMap from StringBuilder using loop? - Java
我在这里使用了几种技术,因此很难在线找到帮助。 我需要使用从StringBuilder
一部分获取的值填充HashMap<String, String>
,然后获取键并将它们添加到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
myAlphaNum
具有类型为String的键,因此将int传递给get
( myAlphaNum.get(j)
)将始终返回null。
有几种方法可以迭代映射的值(或键或条目)。
例如(假设您只关心值):
for (String value : myAlphaNum.values())
arrayList.add(value);
// 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时使用了字符串键位,因此它不会返回任何内容。
您将containsKey / get与Integer作为参数一起使用,而映射键被定义为String。 这就是为什么你没有null的原因。
我建议使用Map<Integer, String> myAlphaNum = new HashMap<Integer, String>(9);
并且在您的循环中myAlphaNum.put(Integer.parseInt(alphaNum.substring(i, ++i)), alphaNum.substring(i, ++i));
。 然后,您将获得所需的输出。
您也可以直接将Collection
作为参数的ArrayList
构造函数(或仅将sysout 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]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.