【问题标题】:Assigning arrays as keys and values of a map将数组分配为映射的键和值
【发布时间】:2013-06-19 15:09:36
【问题描述】:

我有两个字符串类型数组:

String [] a;
String [] b;

然后是地图

Map<String, String> mapNumeric = new HashMap<String, String>();

我希望 a 成为键,b 成为值。所以它看起来像这样:

  • elementOfA = elementOfB
  • otherElementOfA = otherElementOfB

等等……

mapNonNumeric.put( a, b); 不起作用我尝试通过以下方式逐个元素传递:

for( String key : a) {
   mapNumeric.put( key, new String() );}
for( String value: b) {
   mapNumeric.put(new String(), value );}

这也不好,因为 new String() 将删除以前的值。此外,如果您进行嵌套 for 循环,它会将数组 b 的所有值分配为将创建键的数组的第一个元素的值。

如果有人知道如何为同一映射的键分配一个数组,为同一映射的值分配另一个数组,或者如果您知道其他可以解决问题的结构,请提供帮助。谢谢。 PS我正在使用Java

更新 修复 String[] 我正在学习如何使用地图,所以这是一个错误。感谢您的建议,现在正在工作

【问题讨论】:

  • mapNonNumeric 的声明在哪里?
  • 您并没有真正使用Map&lt;String[], String[]&gt;,正如@Fildor 的回答所指出的那样。但即使你是,这也不是一个好主意。您应该很少使用可放置数据作为HashMap 的键。如果ab 是数组,而您使用map.put(a, b); a[0] = "xyzzy";,那么a 现在位于错误的哈希桶中,并且从ab 的映射会丢失。
  • 你想通过使用String数组作为Map的key来实现什么。一个键应该提供他们自己的 equals 和 hashCode 方法的实现。你会怎么做?

标签: java map hashmap


【解决方案1】:

您声明地图使用要使用的字符串的数组

如果你想put(x,y) 其中 x 和 y 是 String ,那么你必须声明它Map&lt;String,String&gt;

对于您的情况,x 是 a 的一个元素,y 是 b 的一个元素。

您必须遍历 a 和 b 才能将它们全部插入到 Map 中,正如您现在可以在各种答案中看到的那样。

【讨论】:

  • a 和 b 是字符串数组,看他的代码。字符串 [] a;字符串 [] b;
  • @PandaBearSoup:我知道。这些是不同的 a 和 b ;) 无法以足够快的速度发布示例以说明这一点。
  • 此外,字符串数组必须在同一个循环中进行迭代:for (int i = 0; i &lt; a.length; i++) map.put(a[i], b[i]);
  • @user2501722 我已经看到(并且可能变得更糟);)
【解决方案2】:

试试这个:

String [] a = getA();
String [] b = getB();
Map<String, String> mapNumeric = new HashMap<>();
for (int i=0; i < Math.min(a.length, b.length); i++) {
   mapNumeric.put(a[i], b[i]);
}

【讨论】:

    【解决方案3】:

    按照您定义它的方式,您将一个数组作为键,另一个作为该键的值。你可能想要这样:

    String[] keys   = getKeys();    // magic
    String[] values = getValues();  // magic
    Map<String, String> map = new HashMap<>();
    for (int i = 0; i < keys.length; i++) {
       map.put(keys[i], values[i];
    }
    

    (假设键和值的长度相同)

    【讨论】:

    • 他不想要字符串的映射,他想在映射中放置多个数组。
    • @PandaBearSoup 不太确定,听起来他在数组 a 中有键,在 b 中有值,现在想要一个映射而不是两个数组。
    • 我也是这么想的。
    • 来自原帖:> 我希望 a 是键, b 是值。所以它看起来像这样: > > elementOfA = elementOfB > otherElementOfA = otherElementOfB
    • @PandaBearSoup 如果您是初学者,没有愚蠢的问题。我猜他还在学习。
    【解决方案4】:
    String [] a = whatever;
    String [] b = whatever;
    int minSize = Math.min(a.length, b.length);
    Map<String, String> mapNumeric = new HashMap<String, String>(minSize);
    
    for (int i = 0; i < minSize; i++) {
      mapNumeric.put(a[i], b[i]);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-30
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多