我有一个 ArrayList,其中有 N 个项目。我想迭代 ArrayList,并将 ArrayList 中的每个项目添加到另一个 ArrayList 中的等效项目。我已经尝试过这个,但它不起作用:
ArrayList<Integer> arrList1 = new ArrayList<Integer>();
for(String key: myMap.keyValues() {
ArrayList<Integer> dynArrList = getArrayListFromSomewhereElse();
for(Integer i : dynArrList) {
arrList1.set(i, arrList1.get(i) + dynArrList.get(i)); // sum each item
}
}
我遇到索引越界异常。我尝试初始化 arrList1,但没有什么区别。我还尝试为其设置最小尺寸。
最佳答案
您尚未提供两个要求和的整数列表。您有dynArrList
作为加数,你有 arrList1
为了结果。但是你没有第二个加数,这应该告诉你你还没有真正理解你的问题。要么您真正的任务不是您想象的那样,要么您没有正确确定从哪里获取数据。
所以,假设你有两个 List<Integer>
s。尽可能对接口(interface)进行编程。你会如何逐项求和?编写一个 sum 方法,并了解如果两个列表大小不同会发生什么。
public List<Integer> sum(List<Integer> left, List<Integer> right) {
if (left.size() != right.size()) {
// A runtime exception you write saying that you can't add two
// arrays of different sizes.
throw new VectorShapeException(left.size(), right.size());
}
List<Integer> vectorSum = new ArrayList<>();
for (int i = 0; i < left.size(); ++i) {
vectorSum.add(left.get(i) + right.get(i));
}
return vectorSum;
}
确定您要添加的内容,然后使用它。
现在,假设您有计算两个整数数组列表的点积的作业。您可能需要两件事——一种对一个列表的元素求和的方法,以及一种获取乘积 vector 的方法。这可能会造成浪费,因为您可能不需要中间列表,并且会浪费空间。第一个任务很简单:
public int sum(List<Integer> list) {
int total = 0;
for(Integer element: list) {
total += element;
}
return total;
}
第二个很简单;只需复制并重命名即可:
public List<Integer> product(List<Integer> left, List<Integer> right) {
if (left.size() != right.size()) {
// A runtime exception you write saying that you can't multiply two
// arrays of different sizes.
throw new VectorShapeException(left.size(), right.size());
}
List<Integer> vectorProd = new ArrayList<>();
for (int i = 0; i < left.size(); ++i) {
vectorProd.add(left.get(i) * right.get(i));
}
return vectorProd;
}
public int dotProduct(List<Integer> left, List<Integer> right) {
return sum(product(left, right));
}
但是这里有一个乏味的问题。剪切、粘贴和修改表明我并没有真正在那里思考。 2 参数求和方法与乘积方法之间唯一真正的区别是运算符和名称。这导致了函数式编程,目前这可能太多了。
关于java - 将 ArrayList 的每个元素添加到另一个 ArrayList 的每个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16198874/