如何修改构造函数中的全局数组的大小

时间:2013-03-12 10:26:04

标签: java arrays size global-variables

如果插槽已满,我需要将阵列中的插槽数加倍。我的代码目前在 我的层次结构是

public class Stack {
   Object filearray[]= new Object [5];

   public Object push(element) {
       if (filearray[filearray.length - 1] != null) {
            Object temp_array[] = new Object[filearray.length*2];
            int origonal = filearray.length*2;
            //adding the element that the user passed in
            temp_array[0] = element;
            for(int i =0; i<filearray.length;i++) {
                temp_array[i+1] =filearray[i];
            }
            //wiping the filearray clear
            Object filearray[] = new Object [origonal];
            for (int i=0; i<temp_array.length; i ++) {
                filearray [i]=temp_array[i];
            }
            return filearray;
        }
    }
}

2 个答案:

答案 0 :(得分:3)

新的双倍大小数组永远不会保留在实例中,因此请查看以下内容以解决此问题:

public Object push(element)
{

    if (filearray[filearray.length - 1] != null)
    {
        Object temp_array[] = new Object[filearray.length*2];
        int origonal = filearray.length*2;
        //adding the element that the user passed in
        temp_array[0] = element;
        for(int i =0; i<filearray.length;i++)
        {
            temp_array[i+1] =filearray[i];
        }

        this.filearray = temp_array;
    }
}

您不需要擦除旧数组只需更改它对新分配数组的引用。

答案 1 :(得分:2)

在上面,您将创建一个新的本地数组,作用于该方法。你没有改变原来的班级成员。这样:

    //wiping the filearray clear
    Object filearray[] = new Object [origonal];

创建一个隐藏类成员的数组filearray。您只需创建临时数组,然后执行:

    filearray = temp_array;

交换参考文献。

我可能会调查ArrayList,因为它会完成所有这些,并且(无关)Java generics,因为它会给你类型安全(除非你真的想要存储Objects