Hashmaps:尝试将字符串附加到字符串列表值

时间:2017-10-31 06:25:13

标签: java string list hashmap linkedhashmap

很抱歉,如果这是一个愚蠢的问题,我对使用地图非常陌生。

(删除了大部分原帖,因为我完全误解了我应该做的事情。)

  static void learnFromText(Map<List<String>, List<String>> whatComesNext, List<String> text) {
    List<String> maurice = new ArrayList<String>();
    List <String> wallace = new ArrayList<String>();
    List <String> romeo = new ArrayList<String>();
    for (int i=0; i<=text.size()-3; i++) {
      maurice.clear();
      wallace.clear();
      maurice.add(text.get(i));
      maurice.add(text.get(i+1));
      if (whatComesNext.containsKey(maurice)==false)
        whatComesNext.put(maurice, romeo);
      wallace=whatComesNext.get(maurice);
      wallace.add(text.get(i+3));
      whatComesNext.put(maurice, wallace);
    }
  }

我有一个字符串列表键和字符串列表值的映射,其中每个键是字符串列表中的两个连续单词&#34; text&#34;。每次我找到键&#34; text.subList(i,i + 2)&#34;我需要将text.get(i + 2)添加到键的值。

例如。

  

文本元素为[A,B,C,D,A,B,E,F]。

     
      
  1. 键(A,B)的值为(C)。
  2.   
  3. 键(B,C)的值是(D)。
  4.   
  5. 键(C,D)的值是(E)。
  6.   
  7. 键(D,A)的值是(B)。
  8.   
  9. 键(A,B)的值为(C,E)。
  10.   
  11. 键(B,E)的值为(F)。
  12.   

代码的问题在于,当它应该构造whatComesNext时,它会以某种方式返回一个ArrayIndexOutOfBoundsException作为文本的大小。

1 个答案:

答案 0 :(得分:1)

问题是clear不用于重新创建List。相反,在您的代码中,您在List的每个元素中使用了相同的Map实例。然后,当您执行clear时,它实际上正在清除地图中的所有元素。

您的代码的最低修改应如下所示。

static void learnFromText(Map<List<String>, List<String>> whatComesNext, List<String> text) {
    List<String> maurice;
    List <String> wallace;
    for (int i=0; i<=text.size()-3; i++) {
      maurice = new ArrayList<>();
      maurice.add(text.get(i));
      maurice.add(text.get(i+1));
      if (whatComesNext.containsKey(maurice)==false)
        whatComesNext.put(maurice, new ArrayList<>());
      wallace=whatComesNext.get(maurice);
      wallace.add(text.get(i+2));
      whatComesNext.put(maurice, wallace);
    }
}