会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132360个问题
JAVA 全系列/第二阶段:JAVA 基础深化和提高/反射技术(旧) 527楼

package com.bjsxt.mycollection.myarraylist;

import java.util.Arrays;

/**
 * 写一个乞丐版ArrayList,实现add,remove,get
 */

public class myArrayList {
    private final int DEFAULT_CAPACITY = 10;//定义默认初始容量为10
    private final Object[] DEFAULT_EMPTY_OBJ = {};//定义一个长度为0的Object类型数组
    public Object[] defaultObj = {};//空数组
    private int size;//数组大小

    //(1)无参构造方法
    public myArrayList() {
        this.defaultObj = DEFAULT_EMPTY_OBJ;
    }
    //(2)带参构造器
    public myArrayList(int Capacity) {//初始长度大于0就创建长度为初始化数值的对象数组
        if(Capacity>0) {
            this.defaultObj = new Object[Capacity];
        }
    }
    //(3)检测空间容量是否够用
    public void ensureCapacityInternal(int minCapacity) {
        if(defaultObj==DEFAULT_EMPTY_OBJ) {
            minCapacity = Math.max(DEFAULT_CAPACITY,minCapacity);
        }
        if(minCapacity>defaultObj.length) {
            grow(minCapacity);
        }
    }
    //(4)扩容grow方法
    public void grow(int minCapacity) {
        int oldCapacity = defaultObj.length;
        int newCapacity = oldCapacity + (oldCapacity >> 1);
        if(newCapacity - minCapacity<0) {
            newCapacity = minCapacity;
            defaultObj = Arrays.copyOf(defaultObj,newCapacity);
        }
    }
    //(5)add方法
    public boolean add(Object obj) {
        ensureCapacityInternal(size+1);
        defaultObj[size++] = obj;
        return true;
    }
    public void add(int index,Object obj) {//根据索引添加
        System.arraycopy(defaultObj,index,defaultObj,index+1,size-index);
        defaultObj[index] = obj;
        size++;
    }
    //(6)remove方法
    public String remove(int index) {
        String oldValues = (String)defaultObj[index];
        int numMove = index-1;//拷贝的元素个数
        if(numMove>0) {
            System.arraycopy(defaultObj,index+1,defaultObj,index,numMove);//将后一位拷贝到前一位
            defaultObj[--size] = null;//最后一个位置设为空
        }
        return oldValues;
    }
    //(7)get方法
    public Object get(int index) {
        return defaultObj[index];
    }
    public int size(){
        return size;
    }
    //输出方法
    public void print() {
        for(Object obj:defaultObj) {
            System.out.print(obj+"\t");
        }
    }

    public static void main(String[] args) {
        myArrayList list = new myArrayList();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("1");
        list.add("2");
        list.add("3");
        System.out.println("****add()方法****");
        list.print();
        System.out.println("集合中元素个数:"+list.size);
        list.remove(2);
        System.out.println("****remove()方法****");
        list.print();
        System.out.println("集合中元素个数:"+list.size);
        System.out.println("****get()方法****");
        System.out.println(list.get(1));
    }
}

老师,作业要求写一个自己的ArrayList,测试的时候只要添加超过10个就报错,帮忙看一下是哪里出了问题。

image.png

JAVA 全系列/第二阶段:JAVA 基础深化和提高/容器(旧) 528楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/智能电话本项目实战 532楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/IO 流技术(旧) 536楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/反射技术(旧) 540楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637