智能数组


题:智能数组
java提供的数组有个特点: 当数组元素的个数确定后,就不能再追加元素了。

也就是说,数组的大小在创建的时候就固定了。

现在请你来写一个智能数组类 SmartArray,它能够根据需要动态地分配空间。

实际上,它只不过是在其它位置分配新的数组,然后把旧的数据拷贝过去。

请提供数组访问方法:

int get(int idx); // 返回指定位置的元素值

void set(int idx, int value); // 对指定的下标元素设置新值。当然,如果下标超出了原来数组的大小,则自动分配新的空间。

源码SArray.java


package SArray;

public class SArray {
    public int[] t = new int[5];
    
    public int get(int idx) {
        if (idx<0 || idx>=t.length) {
            throw new ArrayIndexOutOfBoundsException();
        }
        return t[idx];
    }
    
    public void set(int idx, int val) {
        if (idx<0) {
            throw new ArrayIndexOutOfBoundsException();
        }
        else if (idx>=t.length) {
            int[] nt = new int[idx+5];
            System.arraycopy(t, 0, nt, 0, t.length);
            nt[idx] = val;
            t = nt;
            
        }
        else {
            t[idx] = val;
        }
    }
    public static void main(String[] args) {
        SArray a = new SArray();
        a.t[0] = 6;
        a.t[1] = 1;
        a.t[2] = 0;
        a.t[3] = 11;
        a.t[4] = 23;
        a.t[4] = 777;
        a.set(12, 9);

        for (int i=0; i&lt;a.t.length; i++) {
            System.out.print(a.get(i) + " ");
        }
    }
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注