栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JAVA----集合----手写ArrayList

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JAVA----集合----手写ArrayList

1.首先我们写一个MyArrayList这个类,让它实现List这个接口,再然后 去实现它里面的方法。如下:
public class MyArrayList implements List {

    @Override
    public int size() {
        return 0;
    }

    @Override
    public boolean isEmpty() {
        return false;
    }

    @Override
    public boolean contains(Object o) {
        return false;
    }

    @Override
    public Iterator iterator() {
        return null;
    }

    @Override
    public Object[] toArray() {
        return new Object[0];
    }

    @Override
    public boolean add(Object o) {
        return false;
    }

    @Override
    public boolean remove(Object o) {
        return false;
    }

    @Override
    public boolean addAll(Collection c) {
        return false;
    }

    @Override
    public boolean addAll(int index, Collection c) {
        return false;
    }

    @Override
    public void clear() {

    }

    @Override
    public Object get(int index) {
        return null;
    }

    @Override
    public Object set(int index, Object element) {
        return null;
    }

    @Override
    public void add(int index, Object element) {

    }

    @Override
    public Object remove(int index) {
        return null;
    }

    @Override
    public int indexOf(Object o) {
        return 0;
    }

    @Override
    public int lastIndexOf(Object o) {
        return 0;
    }

    @Override
    public ListIterator listIterator() {
        return null;
    }

    @Override
    public ListIterator listIterator(int index) {
        return null;
    }

    @Override
    public List subList(int fromIndex, int toIndex) {
        return null;
    }

    @Override
    public boolean retainAll(Collection c) {
        return false;
    }

    @Override
    public boolean removeAll(Collection c) {
        return false;
    }

    @Override
    public boolean containsAll(Collection c) {
        return false;
    }

    @Override
    public Object[] toArray(Object[] a) {
        return new Object[0];
    }
}

一:由于ArrayList底层是数组结构,所以我们先定义一个数组,再由于我们不知道将来会在里面

存储什么类型的元素,所以我么它为一个object类型的数组。

二:写一个有参构造方法,来定义数组的初始容量,并实例化对象,让我们先前定义的那个数组

等于实例化的对象。

三:再写一个无参构造。在它里面调用我们的有参构造,有参构造方法会帮我们实例化出一个数

组,再声明一个默认容量,大小为十,将这个默认容量放到无参构造中,这时初始默认容量为十

public class MyArrayList implements List {
    
    private Object[] elementData;
    private static int DefaultCapacity=10;

    public MyArrayList() {
        this(DefaultCapacity);
    }

    public MyArrayList(int initialCapacity) {
        this.elementData = new Object[initialCapacity];
    }
}
2.这时我们来重写它里面的add添加数据的方法:

        一:首先,得确保储存空间能够储存新的数据

        二:这时需要声明一个size属性,然后让size方法返回我们的数组数量。

        三:然后我们要按数组下标进行存储元素

        四:为了验证添加是否成功,让原来的数组数量和添加完当前数组的数量进行比较

        五:但是当存储的数量大于数组的默认初始容量十的时候,就需要扩容啦,

               这需要我们创建一个ensureCapacity方法,并声明参数为最小数量,之后才能在添加方                   法中使用这个方法。用当前数组的长度和最小容量10比较,如果相等则说明满了,需要

               扩容了,如果不相等,则不需要扩容。

               扩容需要先把我们原来的数组拷贝,并让原来的数组等于这个新数组,然后声明新的容量

               新容量为:原来容量的1.5倍。           

        六:元素的读取,需要重写get方法。

        七:重写toString方法。

public class MyArrayList implements List {
    
    private Object[] elementData;
    private int size;
    private static int DefaultCapacity=10;

    public MyArrayList() {
        this(DefaultCapacity);
    }

    public MyArrayList(int initialCapacity) {
        this.elementData = new Object[initialCapacity];
    }

    @Override
    public int size() {
        return this.size;
    }
}
    @Override
    public boolean add(Object o) {
        //确保储存空间能够储存新的数据
        elementData[size++]=o;
        int oldSize=this.size;
        if(this.size>oldSize){
            return true;
        }
        return false;
    }

        private void ensureCapacity(int minCapacity) {
        if(elementData.length==minCapacity){
            //空间不够给数组扩容
            int oldCapacity = elementData.length;
            int newCapacity=oldCapacity+(oldCapacity >>1);
            newCapacity=Math.max(minCapacity,newCapacity);
         elementData= Arrays.copyOf(elementData, newCapacity);
        }
    }
 @Override
    public Object get(int index) {
        return elementData[index];
    }
    
       @Override
    public String toString() {
        String result="[";
        for (int i = 0; i  
3.在指定位置上,移除元素 。 

              一:需要重写add(int index)这个方法。

    @Override
    public Object remove(int index) {
        system.arraycopy(elementData,index+1,elementData,index,size-index-1);
        elementData[--size]=null;
        return elementData[index];
    }

注意:在重写ArrayList时,添加或移除元素时,会造成数据的移动,因为你的数组拷贝了

所以这是它的一个缺点,也就是添加删除慢,但它读取快。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/845214.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号