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