java - 扩展数组?

标签 java

<分区>

我知道您不能动态扩展普通数组,但这是一种有效的扩展方式吗?

public int size = 0;    
public String[] OrigArray = new String[size+1]; 

public void expand(){


            String[] tempArray = new String[size+1];    

            tempArray = (String[])OrigArray.clone();

            OrigArray = new String[size+1];

            OrigArray = (String[])tempArray.clone();    

            size++;         

    }

我知道有比尝试使用普通数组更好的方法,但我想首先使用普通数组来解决这个问题。

我的愿望是它以 OrigArray 为 0+1(因此为 1)开始,当 expand() 被称为新的 tempArray 的大小与 OrigArray 相同,然后保存 OrigArrayOrigArray 再次声明为 size+1 然后 tempArray 被复制回新大小的 OrigArray。这对我来说很有意义,但我总是越界异常?

最佳答案

该方法不改变OrigArray的值;它所做的只是在其中存储一个克隆的克隆,因此实际上该值没有改变。

我想你想要的是这个:

public void expand() {
    String[] newArray = new String[OrigArray.length + 1];
    System.arraycopy(OrigArray, 0, newArray, 0, OrigArray.length);

    //an alternative to using System.arraycopy would be a for-loop:
    // for(int i = 0; i < OrigArray.length; i++)
    //     newArray[i] = OrigArray[i];
    OrigArray = newArray;
}

这将创建一个大小比 OrigArray 大 1 的数组,将 OrigArray 的内容复制到其中并将该数组分配给 OrigArray。除非您想记住 expand() 被调用了多少次,否则没有理由使用变量 size

编辑:如果您真正想要的是了解一种合理地实现您要求的功能的方法,您可以按照@Óscar López 所说的去做,并使用 ArrayList。

关于java - 扩展数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8438879/

相关文章:

java - 使用 Java 读取 WIRELESS .pcap 数据包

java - 如何简化从 DFA 生成的正则表达式

java - 数组越界 [ArrayList 的冒泡选择]

java - Hash Map 中的 getEntry() 方法使用了冗余的 Object 引用

java - 迷你桶尺寸

java - Liferay kaleo 工作流程通知,向特定用户发送电子邮件而不是角色

java - java中如何解耦数据和行为对象?

java - 测试 ClassNotFound 异常

java - 覆盖 Java/Swing 中 JMenuItems 中加速键的显示外观

java - 导致 java.lang.IndexOutOfBoundsException 的函数