【问题标题】:Merging two lists into a new list, index to same index, while not adding to length将两个列表合并到一个新列表中,索引到相同的索引,而不增加长度
【发布时间】:2014-09-06 16:33:57
【问题描述】:

我试图将两个列表合并到一个新列表中,这两个列表的所有值与原始列表保持相同的索引,同时不增加新列表的长度。 列表 A 在随机索引处包含一个数字,有些为空,数字在 1-3 之间。 列表 B 包含所有索引上的数字 123。 我尝试使用 for 循环和列表添加,但随后它给了我一个 indexoutofbounds,因为似乎列表添加在添加值时会推送列表的内容。我现在正在尝试使用 hashmap:

列表:

Int arraylength = 10;

ArrayList<Integer> mergeballs = new ArrayList<>(arraylength); // merging list A
// contenent: null,3,null,null,2,3,null,1,null,2

ArrayList<Integer> hats = new ArrayList<>(arraylength); // merging list B
//contenent: 123,123,123,123,123,123,123,123,123,123


ArrayList<Integer> hatsMerged = new ArrayList<Integer>(arraylength); // A & B merged
for (int o = 0; o < stickarray.length; o++) {
    HashMap<Integer, Integer> map = new HashMap<Integer, Integer (arraylength);
    map.put(o, hats.get(o) + mergeballs.get(o));
    hatsMerged.add(o,map.get(o));
    System.out.print(hatsMerged.get(o));
}

有了这段代码,我也得到了一个越​​界的索引,帽子和合并球正在被总结,这是我不想要的。我希望它是:123,1233,123,123,1232,1233,123,1231,123,1232

我该怎么做? hashmap 是最好的选择吗?

【问题讨论】:

  • 这两个列表如何在合并后将项目保持在同一索引中?合并后,合并后的列表将包含两个列表的项目,那么列表 B 的项目 1 如何在与也有项目 1 的列表 A 合并后保留在该索引处?
  • 在所有索引上包含相同值的列表有什么意义?另外,我同意 Edwin Dalorzo 的观点,据我所知,这个问题毫无意义。

标签: java list hashmap


【解决方案1】:

这是执行您似乎要求的一种方法。忽略null,将int 转换为String - 然后将另一个int 连接到String 并转换回int 以存储在合并的List&lt;Integer&gt; 中。类似的,

public static List<Integer> merge(List<Integer> a, List<Integer> b) {
    List<Integer> al = new ArrayList<>();
    for (int i = 0; i < a.size(); i++) {
        Integer val = a.get(i);
        StringBuilder sb = new StringBuilder();
        if (val != null) {
            sb.append(val);
        }
        Integer bv = b.get(i);
        if (bv != null) {
            sb.append(bv);
        }
        try {
            al.add(Integer.parseInt(sb.toString()));
        } catch (NumberFormatException nfe) {
            nfe.printStackTrace();
        }
    }
    return al;
}

public static void main(String[] args) {
    List<Integer> a = Arrays.asList(123, 123, 123, 123, 123, 123, 123, 123,
            123, 123);
    List<Integer> b = Arrays.asList(null, 3, null, null, 2, 3, null, 1,
            null, 2);
    List<Integer> merged = merge(a, b);
    System.out.println(merged);
}

输出是(请求的)-

[123, 1233, 123, 123, 1232, 1233, 123, 1231, 123, 1232]

【讨论】:

    【解决方案2】:

    你不需要使用 hashmap 。您可以只检查空值并用零替换,然后添加并合并两个列表之间的值。您可以通过将 mergeballs.get(0) 分配给 Integer 局部变量并在条件表达式中使用它来避免 2 个 get 调用。

        Integer result;
        ArrayList<Integer> hatsMerged = new ArrayList<Integer>(arraylength); // A & B merged
        for (int o = 0; o < arraylength; o++) {
            result = ((mergeballs.get(o) == null) ? 0 : mergeballs.get(o)) + ((hats.get(o) == null) ? 0 : hats.get(o));
            hatsMerged.add(result);
            System.out.print(hatsMerged.get(o));
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-28
      • 2018-08-09
      • 1970-01-01
      • 1970-01-01
      • 2018-03-06
      • 2021-08-10
      • 1970-01-01
      相关资源
      最近更新 更多