中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JAVA自己實現ArrayList

發布時間:2020-07-18 17:10:18 來源:網絡 閱讀:618 作者:kepp007 欄目:編程語言
ArrayList
            內部用數組存放數據
            數組的缺點:
                長度不可變;
                訪問方式單一,只能用下表索引;
            效率表現:訪問任何位置 效率一樣,增刪數據效率降低
            內部數組默認的初始容量10;
            放滿之后,容量1.5倍增長;減少數組創建提高效率;

JAVA自己實現ArrayList

package 集合.list.ArrayList;

import java.util.Arrays;
import java.util.Date;

public class MyArryList {

    //定義一個空的數組
    private final static Object[] myArray = {};
    //定義一個默認長度10
    private final static int default_length = 10;
    Object[] elementData;
    //myArryList長度
    private int size = 0;

    //無參數構造方法,默認容量10
    public MyArryList() {
        this.elementData = myArray;
    }

    //帶參數構造函數
    public MyArryList(int length) {
        if (length < 0) {
            throw new IllegalArgumentException("參數不能小于0");
        }
        this.elementData = new Object[length];
        size = length;
    }

    //獲取長度
    public int getSize() {
        return this.size;
    }

    //添加元素
    public void add(Object args) {
        //每次添加元素時需要考慮長度問題
        //判斷是否需要擴容
        if (size >= elementData.length) {
            this.grown();
        }
        elementData[size++] = args;
    }

    //擴容方法
    private void grown() {
        if (elementData.length <= 1) {
            elementData = Arrays.copyOf(elementData, elementData.length + 1);
        } else {
            elementData = Arrays.copyOf(elementData, elementData.length + (elementData.length >> 1));
        }
    }

    //刪除元素
    public void remove(Object obj) {
        //先查找第一次出現的索引
        int i = indexOf(obj);
        if (i != -1) {
            remove(i);
        }
    }

    //刪除指定索引位置元素
    public void remove(int index) {
        if (index < 0 || index > size) {
            throw new IndexOutOfBoundsException("參數越界");
        }
        //遍歷數組
        //for(int i = index;i<elementData.length;i++){
        //    elementData[i]=elementData[i+1];
        //}
        System.arraycopy(elementData, index + 1, elementData, index, size - index - 1);
        size--;
    }

    //指定索引插入元素
    public void insert(int index, Object obj) {
        if (index < 0 || index > size) {
            throw new IndexOutOfBoundsException("參數越界");
        }
        //
        if (size >= elementData.length) {
            this.grown();
        }
        //[1,2,3,4][1,2,5,3,4]第一種方式
//        System.arraycopy(elementData,index, elementData,index-1,size-index);

        //遍歷數組
        for (int i = size - 1; i >= index; i--) {
            elementData[i + 1] = elementData[i];
        }
        //將需要插入元素放入指定索引位置
        elementData[index] = obj;
        size++;
    }

    //查找元素第一次索引
    public int indexOf(Object obj) {
        for (int i = 0; i < size; i++) {
            if (elementData[i] == obj || elementData[i] != null && elementData[i].equals(obj)) {
                return i;
            }
        }
        return -1;
    }

    //更改元素
    public void set(int index, Object obj) {
        elementData[index] = obj;
    }

    //清空數據
    public void clear() {
        elementData = new Object[0];
        size = 0;
    }

    //判斷索引是否越界
    public boolean out(int index) {
        if (index < 0 || index > size) {
            return false;
        } else return true;
    }

    //判斷是否包含
    public boolean contains(Object obj) {
        return indexOf(obj) != -1;
    }

    //判斷是否為空
    public boolean isEmpty() {
        return size == 0;
    }

    //截取子列表
    public MyArryList sublist(int fromIndex, int toIdex) {
        if (fromIndex < 0 || toIdex > size) {
            throw new IndexOutOfBoundsException("越界");
        }
        if (fromIndex > toIdex) {
            throw new IllegalArgumentException();
        }
        MyArryList sublist = new MyArryList(toIdex - fromIndex);
        System.arraycopy(elementData, fromIndex, sublist, 0, toIdex - fromIndex);
        sublist.size = toIdex - fromIndex;
        return sublist;
    }

    //toString重寫

    @Override
    public String toString() {
        Object[] newstring =new Object[size];
        System.arraycopy(elementData, 0, newstring, 0, size);

        return  Arrays.toString(newstring);
    }
}
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

绍兴市| 大渡口区| 丘北县| 屏南县| 长泰县| 阳东县| 哈密市| 万宁市| 常熟市| 沅陵县| 邳州市| 惠来县| 馆陶县| 鄢陵县| 赫章县| 广汉市| 东明县| 霍山县| 札达县| 广昌县| 新和县| 盐城市| 沂南县| 分宜县| 双桥区| 洮南市| 桑日县| 湛江市| 余江县| 桃园县| 宣威市| 宜春市| 舒兰市| 大渡口区| 祁东县| 明光市| 牟定县| 河津市| 佛教| 张家口市| 张家港市|