![](/img/trans.png)
[英]problem with merging/adding multiple elements in Linked List in the same index (JAVA)
[英]Merging two lists into a new list, index to same index, while not adding to length
我试图将两个列表合并到一个新列表中,并且两个列表的所有值都与原始列表保持相同的索引,同时不增加新列表的长度。 列表A在随机索引处包含一个数字,一些为空,数字在1-3之间。 列表B在所有索引上均包含数字123。 我尝试使用for循环和列表添加,但是随后它给了我indexoutofbounds,因为似乎列表添加在添加值时会推送列表的内容。 我现在正在尝试使用哈希图:
清单:
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
我怎样才能做到这一点? 哈希图是最好的选择吗?
这是一种执行您似乎要求的方法。 忽略null
,则转换int
到一个String
-然后串联另一int
到String
并转换回一个int
用于存储在合并List<Integer>
。 就像是,
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]
您无需使用hashmap。 您可以只检查空值并用零代替,然后添加并合并两个列表之间的值。 您可以通过将mergeballs.get(0)
分配给Integer局部变量并在条件表达式中使用它来避免两次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));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.