Java實現動態數組


  普通數組的元素個數是固定的,當數組滿了之后要怎么辦?數組要有多大才合適,有時提前並不知道。所以希望能夠在運行時具有改變數組大小的能力。

  動態數組就可以在任何時候改變大小。動態數組是指在聲明時沒有確定數組的大小,使用動態數組的優點是可以根據用戶需求,有效利用存儲空間。

  假如有一個班級對象clazz,這有一個方法addStudent,這個方法的參數是Student對象,當我們調用addStudent方法添加學生時,在clazz對象中有一個students數組來存放學生對象,但是當數組滿了后,就要創建一個新的數組,這個數組要比原數組大,並把原數組中的學生對象轉移到新數組中,並把原數組釋放了,這樣就成了動態數組,只要調用addStudent者願意,它就可以一直給clazz添加學生。開發中當數組滿時,創建的新數組大小不會是比原數組多一個元素,這樣會在后續加入學生時,每次都創建新數組,轉移數組元素,釋放原數組,效率太低,往往創建的新數組大小是原數組的1.5倍大小。

實現

import java.util.Arrays;

/**
 * copyright(c)2021 zbh.ALL rights Reserved
 * <p>
 * 描述:
 *
 * @author zbh
 * @version 1.0
 * @date 2021/2/23
 */
public class Demo6 {
    /**
     * 初始數組大小
     */
    private static final int INIT = 4;

    /**
     * 存儲數據數組
     */
    int[] arr;

    /**
     * 當前位置
     */
    int index = 0;

    /**
     * 無參默認的構造方法
     */
    public Demo6() {
        // 構造方法嵌套調用,直接寫this,不寫方法名
        // 此代碼只能是第一行
        this(INIT);
    }

    /**
     * 初始化對象
     *
     * @param capacity 數組初始值
     */
    public Demo6(int capacity) {
        this.arr = new int[capacity];
    }

    /**
     * 增加一個數字
     *
     * @param num
     */
    public void add(int num) {
        if (index >= arr.length) {
            // arr.length >> 1 等同於arr.length除以2
            int length = arr.length + (arr.length >> 1);
            // 轉移數組元素,第一個參數是原數組,第二個參數是新數組的長度,copyOf返回新數組
            arr = Arrays.copyOf(arr,length);
        }
        arr[index++] = num;
    }

    public static void main(String[] args) {
        Demo6 d = new Demo6();
        for (int i=0;i<20;i++) {
            d.add(i);
        }
        System.out.println(Arrays.toString(d.arr));
    }
}

運行結果:

由結果可得:數組初始只有四個大小,當不斷向里面添加數字,數組的容積也在不斷擴大,結果中最后的三個0(沒有放數據,系統給的默認值)是因為創建的新數組大小不會是比原數組多一個元素,這樣會在后續加入學生時,每次都創建新數組,轉移數組元素,釋放原數組,效率太低,往往創建的新數組大小是原數組的1.5倍大小。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM