成都网站建设设计

将想法与焦点和您一起共享

JAVA自己实现ArrayList

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 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);
    }
}

分享标题:JAVA自己实现ArrayList
浏览路径:http://chengdu.cdxwcx.cn/article/pdshpi.html