【问题标题】:Adding values in to a HashMap将值添加到 HashMap
【发布时间】:2011-08-29 13:34:19
【问题描述】:

我需要帮助将字符串数组中的值添加到 HashMap 中。

if (!loaded){
    synchronized(syncLock){
        if (!loaded){
            loaded=true;
            if (prefix!=null){
            prefixMap = new HashMap<Integer, Float>();
            String userDefaultPrefix[] = prefix.split("~");
            }


        }
    }
}

我将字符串存储在 userDefaultPrefix 中,我需要将这些值添加到 prefixMap。 TIA

【问题讨论】:

  • A "map" 映射事物 -- A => B. 那么你打算映射到什么?
  • prefixMap 是 Map&lt;Integer,Float&gt; 而 userDefaultPrefix 中的元素是 Strings,您应该说明您希望如何添加这些元素,并提供示例输入,以获得更好的答案。
  • @Amit --- 抱歉,它是一个 prefixMap = new HashMap();
  • @Jeyaprakash:整数应该是多少? 1,...,userDefaultPrefix.length ? 0,...使用DefaultPrefix.length-1?还是完全不同的东西?
  • 另外,有点不相关,但您似乎以不安全的方式使用双重检查锁定。您可能计划在synchronized 块之外访问prefixMap。为了正确起见,您应该使用ConcurrentHashMap 或Collections.synchronizedMap() 而不是常规的HashMap,并确保loaded 和prefixMap 变量都声明为volatile。此外,loaded=true; 应该出现在块的末尾。

标签: java arrays string hashmap


【解决方案1】:

如果我说得对,并且您对数据质量有把握,那么您可以通过以下方式填写 prefixMap:

for (int i = 0; i < userDefaultPrefix.length; i += 2) {
    if (i+1 < userDefaultPrefix.length) {
        prefixMap.put(Integer.parseInt(userDefaultPrefix[i]),
                Float.parseFloat(userDefaultPrefix[i+1]));
    }
}

【讨论】:

    【解决方案2】:

    假设您想要 (i->userDefaultPrefix[i]) 的地图:

    for (int i = 0; i < userDefaultPrefix.length;i++) {
       prefixMap.put(i,userDefaultPrefix[i]); //note that the autoboxing automatically boxes your int to an Integer
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多