Java 将一个ArrayList的每个元素添加到另一个ArrayList的每个元素
我有一个ArrayList,它有N个项。我希望遍历ArrayList,并将ArrayList中的每个项添加到另一个ArrayList中的等效项。我试过这个,但不起作用:Java 将一个ArrayList的每个元素添加到另一个ArrayList的每个元素,java,arraylist,Java,Arraylist,我有一个ArrayList,它有N个项。我希望遍历ArrayList,并将ArrayList中的每个项添加到另一个ArrayList中的等效项。我试过这个,但不起作用: ArrayList<Integer> arrList1 = new ArrayList<Integer>(); for(String key: myMap.keyValues() { ArrayList<Integer> dynArrList = getArrayListFromSo
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
}
}
ArrayList arrList1=new ArrayList();
for(字符串键:myMap.keyValues(){
ArrayList dynArrList=GetArrayList fromSomewhere();
用于(整数i:dynArrList){
arrList1.set(i,arrList1.get(i)+dynArrList.get(i));//对每个项求和
}
}
我获得索引越界异常。我尝试初始化arrList1,但没有任何区别。我还尝试为其设置最小大小。索引越界异常来自您的循环:
for(Integer i : dynArrList) {
arrList1.set(i, arrList1.get(i) + dynArrList.get(i));
}
在这种情况下,i
不是列表的索引。不能保证您的任何列表都有i
元素。您可能需要一个标准的for
循环:
for(int i = 0; i < dynArrList.size(); i++) {
arrList1.set(i, arrList1.get(i) + dynArrList.get(i));
}
for(int i=0;i
此外,如果要计算任何类型的总和,需要确保两个列表的元素数相同,或者只计算两个列表中较短的一个列表的长度。索引越界异常来自循环:
for(Integer i : dynArrList) {
arrList1.set(i, arrList1.get(i) + dynArrList.get(i));
}
在这种情况下,i
不是列表的索引。不能保证您的任何列表都有i
元素。您可能需要一个标准的for
循环:
for(int i = 0; i < dynArrList.size(); i++) {
arrList1.set(i, arrList1.get(i) + dynArrList.get(i));
}
for(int i=0;i
此外,如果要计算任何类型的求和,需要确保两个列表的元素数相同,或者只计算两个列表中较短的一个的长度。您没有提供两个整数列表来求和。您有
dynArrList
作为加数,还有arrList1
的结果。但是你没有第二个加数,这应该告诉你你还没有真正理解你的问题。或者你真正的任务不是你认为的,或者你没有正确地确定你从哪里获得数据
因此,假设您有两个List
s。尽可能在界面上编程。您将如何逐项求和?编写求和方法,并识别如果两个列表的大小不同会发生什么
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;
}
公共列表总和(左列表、右列表){
if(left.size()!=right.size()){
//您编写的运行时异常表示无法添加两个
//不同大小的数组。
抛出新的VectorShapeException(left.size(),right.size());
}
List vectorSum=new ArrayList();
对于(int i=0;i
确定要添加的内容,并使用此选项
现在,假设您有计算两个整数数组列表的点积的任务。您可能需要两件事——一个是求一个列表元素之和的方法,另一个是求乘积向量的方法。这可能是浪费,因为您可能不需要中间列表,而且会浪费空间。第一个任务很简单:
public int sum(List<Integer> list) {
int total = 0;
for(Integer element: list) {
total += element;
}
return total;
}
公共整数和(列表){
int-total=0;
for(整型元素:列表){
总+=元素;
}
返回总数;
}
第二个很简单;只需复制和重命名内容:
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));
}
公共列表产品(左列表、右列表){
if(left.size()!=right.size()){
//您编写的运行时异常表示不能将两个相乘
//不同大小的数组。
抛出新的VectorShapeException(left.size(),right.size());
}
List vectorProd=new ArrayList();
对于(int i=0;i
但是这里有一个乏味的问题。剪切、粘贴和修改是一个信号,表明我没有真正思考。2参数求和和和乘积方法之间唯一的真正区别是运算符和名称。这导致了函数式编程,现在可能太多了。您没有向su提供两个整数列表m在一起。你有
dynArrList
作为加数,你有arrList1
作为结果。但是你没有第二个加数,这应该告诉你你还没有真正理解你的问题。或者你真正的任务不是你认为的,或者你没有正确地确定你从哪里获得数据
因此,假设您有两个List
s。尽可能在界面上编程。您将如何逐项求和?编写求和方法,并识别如果两个列表的大小不同会发生什么
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;
}
公共列表总和(左列表、右列表){
if(left.size()!=right.size()){
//您编写的运行时异常表示无法添加两个
//不同大小的数组。
抛出新的VectorShapeException(left.size(),right.size());
}
List vectorSum=new ArrayList();
对于(int i=0;i
确定要添加的内容,并使用此选项
现在,假设您有计算两个整数数组列表的点积的任务。您可能需要两件事——一个是求一个列表元素之和的方法,另一个是求乘积向量的方法。这可能是浪费,因为您可能不需要中间列表,而且会浪费空间。第一个任务很简单:
public int sum(List<Integer> list) {
int total = 0;
for(Integer element: list) {
total += element;
}
return total;
}
公共整数和(列表){
int-total=0;
for(整型元素:列表){
总+=元素;
}
返回总数;
}
塞科