当前位置: 首页 > 知识库问答 >
问题:

在Java[复制]中复制Arraylist时出现异常

安星汉
2023-03-14

我是Java的新手,并试图了解集合。当我试图将一个ArrayList复制到另一个时,我遇到了异常。请在下面找到相同的代码。

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class ArrayListTest {

    public static void main(String[] args) {

        try(Scanner scanner = new Scanner(System.in) ){
            System.out.println("Enter the number of elements to enter into an array");
            int userCount = scanner.nextInt();
            System.out.println("Enter the number one by one");
            ArrayList<Integer> arrayList = new ArrayList<>();
            ArrayList<Integer> destinationList = new ArrayList<>(arrayList);
            for(int i=0; i<userCount; i++){
                arrayList.add(scanner.nextInt());
            }

            Collections.copy(destinationList, arrayList);           
            //Print elements in the Array List
            for(Integer number: destinationList){
                System.out.println("The numbers are");
                System.out.println(number);
            }

        }

        }
}

异常:线程“main”中的异常 java.lang.IndexOutOfBounds异常:Source 不适合 java.util.Collections.copy(未知来源) at ArrayListTest.main(ArrayListTest.java:19)

如果我做错了什么,请告诉我。

共有2个答案

程景胜
2023-03-14

复制方法需要目标的大小等于或大于要复制的列表。默认情况下,arrayList的大小会随着添加更多元素而增加。您需要检查数组列表的大小,然后创建大小相同或更大的目标列表,以避免此异常。

任长卿
2023-03-14

我修复了您的代码,请尝试以下操作:

try (Scanner scanner = new Scanner(System.in)) {
        System.out.println("Enter the number of elements to enter into an array");
        int userCount = scanner.nextInt();
        System.out.println("Enter the number one by one");
        ArrayList<Integer> arrayList = new ArrayList<>();
        for (int i = 0; i < userCount; i++) {
            arrayList.add(scanner.nextInt());
        }

        ArrayList<Integer> destinationList = new ArrayList<>(arrayList);
        // Print elements in the Array List
        for (Integer number : destinationList) {
            System.out.println("The numbers are");
            System.out.println(number);
        }

}

此行将arrayList复制到您的目标列表中:

ArrayList<Integer> destinationList = new ArrayList<>(arrayList);
 类似资料:
  • 问题内容: 我的尺寸为10。我将其分配l1给新列表引用类型。威尔和指向同一个对象吗?还是分配给对象的副本l2? 使用引用时,如果我更新列表对象,它也会反映l1引用类型中的更改。 例如: 除了创建2个列表对象并在集合上进行从旧到新的复制之外,没有其他方法可以将列表对象的副本分配给新的引用变量吗? 问题答案: 是的,分配将刚刚复制值的(这是引用)。它们都将引用相同的对象。 但是,创建浅表副本非常简单:

  • 本文向大家介绍如何复制或克隆Java ArrayList?,包括了如何复制或克隆Java ArrayList?的使用技巧和注意事项,需要的朋友参考一下  java.util.ArrayList类的 clone()方法返回此ArrayList实例的浅表副本(即,不复制元素本身)。使用此方法,可以将一个数组列表的内容复制到另一个数组列表。 示例 输出结果

  • 你怎么捕获一个异常,之后在另外一个线程上重新抛出?使用在标准文档18.8.5中描述的异常传递中的方法吧,那将显示标准库的魔力。 exception_ptr current_exception(); 返回一个exception_ptr 变量,它将指向现在正在处理的异常(15.3)或者现在正在处理的异常的副本(拷贝),或者有的时候在当前没有遇到异常的时候,返回值为一个空的exception_ptr变量

  • 我了解到,当您在Java中修改变量时,它不会改变它所基于的变量 我对对象也假设了类似的情况。考虑一下这个类。 在我试过这个代码后,我搞糊涂了。

  • 你可以将复制图表和列表导出为一份 PDF 文件。若要导出复制,请单击 。 复制图表 复制列表

  • 问题内容: 我需要制作一个副本,`HashMap<Integer, List List List `原件中。 如果我正确理解,这两种方法只会创建浅拷贝,这不是我想要的: 我对吗? 除了遍历所有键和所有列表项并手动复制之外,还有更好的方法吗? 问题答案: 没错,浅表副本不能满足您的要求。它将具有原始地图中的副本,但这些副本将引用相同的对象,因此对from 的修改将出现在from的对应内容中。 在Ja