Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将两个列表合并到一个新列表中,索引到同一个索引,同时不增加长度_Java_List_Hashmap - Fatal编程技术网

Java 将两个列表合并到一个新列表中,索引到同一个索引,同时不增加长度

Java 将两个列表合并到一个新列表中,索引到同一个索引,同时不增加长度,java,list,hashmap,Java,List,Hashmap,我正在尝试将两个列表合并到一个新列表中,其中两个列表的所有值与原始列表保持在同一索引中,同时不增加新列表的长度。 列表A在随机索引中包含一个数字,有些是空的,数字在1-3之间。 列表B包含所有索引上的数字123。 我尝试使用for循环和list add,但是它给了我一个indexoutofbounds,因为list add似乎在添加值时推动列表的内容。我现在正在尝试使用hashmap: 清单: Int arraylength = 10; ArrayList<Integer> mer

我正在尝试将两个列表合并到一个新列表中,其中两个列表的所有值与原始列表保持在同一索引中,同时不增加新列表的长度。 列表A在随机索引中包含一个数字,有些是空的,数字在1-3之间。 列表B包含所有索引上的数字123。 我尝试使用for循环和list add,但是它给了我一个indexoutofbounds,因为list add似乎在添加值时推动列表的内容。我现在正在尝试使用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));
}
有了这段代码,我也得到了一个超出范围的索引,hats和mergeballs得到了总结,这是我不想要的。我希望它是:12312331231231232123312312311231232


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

这里有一种方法可以满足您的要求。忽略null,将int转换为字符串-然后将另一个int连接到字符串并转换回int以存储在合并列表中。大概

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);
}

您不需要使用hashmap。您只需检查null值并用零替换,然后添加,从而合并两个列表之间的值。通过将mergeballs.get0分配给整型局部变量并在条件表达式中使用它,可以避免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));
    }

合并后,两个列表如何将项目保持在同一索引中?一旦合并,合并后的列表将包含两个列表的项目,那么列表B的项目1在与同样有项目1的列表A合并后如何保持在该索引中?在所有索引上包含相同值的列表有什么意义?另外,我同意埃德温·达洛佐的观点,就我所理解的而言,这个问题毫无意义。
    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));
    }