【问题标题】:How to extend an array in Java without changing its name如何在不更改名称的情况下在 Java 中扩展数组
【发布时间】:2011-05-26 16:04:11
【问题描述】:

我想知道是否可以在 Java 中扩展一个数组但不更改其名称,因为我有多个方法链接到这个数组。我正在考虑创建一个名称相同但大两倍的新数组,然后将所有元素从第一个数组复制到第二个。这可能吗?
基本上我想用银行账户创建一个数组,如果客户创建了这么多账户以至于数组没有足够的元素,它应该扩展自己。
感谢您的任何回复!

【问题讨论】:

  • 不是 Java 开发人员,但如果您需要一个动态大小的数组,那么类型化的 Vector 不是一个好的选择吗?
  • 所以目前我的数组看起来像这样: SimpleAccount [] AccountArray = new SimpleAccount[10];那么如何将其更改为 ArrayList?

标签: java arrays extend


【解决方案1】:
public static void extendarrayafterinitialization(int [] x){
        Scanner input =new Scanner(System.in);
        System.out.print("How many values do you need to insert to the Array : ");
        int how=input.nextInt();
        int length=x.length+how;
        int [] all=new int[length];
        int value=0;
        System.out.println(length);
        for(int i=0;i<x.length;i++){
            all[i]=x[i];
            }
            for(int j=x.length;j<length;j++){
                System.out.print("Enter new value : ");
                int index=input.nextInt();
                all[j]=index;
                }
        for(int print : all){
            System.out.println(print);
            }
        }

【讨论】:

    【解决方案2】:

    即使在许多情况下使用ArrayList 可能是一个很好的建议,也有使用普通旧数组的完全合法的场合。

    在这种情况下,如果您需要调整数组的大小,您可能需要研究java.utils.Arrays.copyOf 方法之一。但请注意,这些不会真正调整您的数组。他们只会创建一个新数组并复制公共项目。

    如果新数组的大小大于旧数组,则新项目将被初始化为某个默认值(即:false 用于 boolean[]null 用于 T[] - 请参阅文档细节)。您必须像这样使用这些功能:

    myArray = copyOf(myArray, myNewSize); 
    

    但请记住,此方法将始终返回一个 new 数组。即使请求的大小与原始大小相同。如果这是可取的,你将不得不写这样的东西:

    myArray = (myNewSize > myArray.length) ? copyOf(myArray, myNewSize) : myArray;
    

    【讨论】:

      【解决方案3】:

      这是我为我的 Java 编程课编写的一个方法

      private static double[] extendArraySize(double [] array){
          double [] temp = array.clone();
          array = new double[array.length + 1];
          System.arraycopy(temp, 0, array, 0, temp.length);
          return array;
      }
      

      它的工作原理很容易解释,尽管在它的使用方式上它必须有 分配给方法的数组,数组名称作为参数传递,方法的数据类型必须始终是传入的数组类型。

      示例:

      double [] z = {1,2,3};  //size of z = 3; [0,1,2]   VALUES: [1,2,3]
      z = extendArraySize(z); //size of z = 4; [0,1,2,3] VALUES: [1,2,3,0];
      

      很抱歉,如果它的解释很糟糕,我相信有更好的方法来做它 VIA 向量或 ArrayLists。但是,如果您要扩展原始数组,这是一种方法。

      希望对我有所帮助 =D

      【讨论】:

      • 这个解决方案在内存上非常简单,因为它只分配它需要的数组。另一方面:如果您返回扩展数组,则不需要将数组克隆到临时数组中。
      【解决方案4】:

      您无法更改现有数组,但可以创建一个具有所需类型和大小的新数组,将数据从原始数组复制到新创建的数组,然后将其分配给原始数组变量。

      但你不应该这样做。

      使用java.util.List 的任何实现代替数组。我认为ArrayList 对于这种情况来说是一个不错的选择。

      【讨论】:

      • 有时你不想使用 ArrayList 有一个完全正当的理由。例如,如果源是由其他组件创建的数组,则您无法更改。
      【解决方案5】:

      使用ArrayList,它会为您完成所有这些工作。只需调用 add()addAll() 即可追加内容。

      【讨论】:

      • 太棒了!所以目前我的数组看起来像这样: SimpleAccount [] AccountArray = new SimpleAccount[10];那么如何将其更改为 ArrayList?
      • @Kajsa: ArrayList&lt;SimpleAccount&gt; accounts = new ArrayList&lt;SimpleAccount&gt;();
      猜你喜欢
      • 2011-09-18
      • 2013-05-20
      • 1970-01-01
      • 1970-01-01
      • 2018-09-28
      • 2017-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多