手写一个乞丐版的ArrayList

2022-10-27 15:55:59 浏览数 (1)

「Talk is cheap. Show me the code」

代码语言:javascript复制
package com.jmy.list;

import org.junit.Test;

import java.util.Arrays;

public class MyArrayList {
    private final int capacity = ;
    private String[] list = new String[capacity];
    int size = ;

    /**
     * 向集合中添加元素
     */
    public void add(String str){
        if (this.isNull(str)) {
            throw new IllegalArgumentException("兄弟醒醒!");
        }
        if (size == list.length) {
            this.grow();
        }
        list[size  ] = str;
    }

    /**
     * 向指定下标位置添加元素
     * @param index 指定下标
     * @param str 想要添加的元素
     */
    public void add(int index,String str){
        if (this.argument(index)) {
            throw new IndexOutOfBoundsException("兄弟醒醒!");
        }

        if (this.isNull(str)) {
            throw new IllegalArgumentException("兄弟醒醒!");
        }

        if (size == list.length) {
            this.grow();
        }

        for (int i = size; i > index; i--) {
            list[i] = list[i - ];
        }

        list[index] = str;
        size  ;
    }

    /**
     * 移除此列表中指定位置上的元素。
     * @param index 指定下标
     * @return 返回被删除元素
     */
    public String remove(int index){

        if (this.argument(index)) {
            throw new IndexOutOfBoundsException("兄弟醒醒!");
        }

        String str = list[index];
        for (int i = index; i < size; i  ) {
            list[i] = list[i   ];
        }
        size--;
        return str;
    }

    /**
     * 删除指定元素
     * @param str 要删除的元素
     * @return 成功返回true 失败返回false
     */
    public boolean remove(String str){

        if (this.isNull(str)) {
            throw new IllegalArgumentException("兄弟醒醒!");
        }

        for (int i = ; i < size; i  ) {
            if (str.equals(list[i])) {
                this.remove(i);
                return true;
            }
        }

        return false;
    }

    /**
     * 用指定的元素替代此列表中指定位置上的元素。
     * @param index 指定位置
     * @param str 指定元素
     * @return 被替换的元素
     */
    public String set(int index, String str){

        if (this.argument(index)) {
            throw new IndexOutOfBoundsException("兄弟醒醒!");
        }

        if (this.isNull(str)) {
            throw new IllegalArgumentException("兄弟醒醒!");
        }

        String string =  list[index];
        list[index] = str;
        return string;
    }

    /**
     * 返回此列表中指定位置上的元素。
     * @param index 指定位置
     * @return 此列表中指定位置上的元素
     */
    public String get(int index){

        if (this.argument(index)) {
            throw new IndexOutOfBoundsException("兄弟醒醒!");
        }

        return list[index];
    }
    /*
    判断传入的元素是否为空
     */
    private boolean isNull(String str){
        return str == null ? true : false;
    }

    private boolean argument(int index){
        return index <  || index > size ? true : false;
    }
    /**
     * 数组扩容
     */
    private void grow (){
        if (list.length == ) {
            list = Arrays.copyOf(this.list, );
        } else {
            list = Arrays.copyOf(this.list, this.list.length   (this.list.length >> ));
        }

    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("[");

        for (int i = ; i < size ; i  ) {
            if (i < size - ) {
                sb.append(list[i]   ",");
            } else {
                sb.append(list[i]);
            }
        }
        sb.append("]");
        return sb.toString();
    }

    public static void main(String[] args) {
        MyArrayList ml = new MyArrayList();
        ml.add("1");
        ml.add("2");
        ml.add("3");
        ml.add("4");
        ml.add("5");
        ml.add("6");
        ml.add("7");
        ml.add("8");
        ml.add("9");
        ml.add("10");
        ml.add("11");
        ml.set(,"十一");
        System.out.println(ml.get());
        System.out.println(ml.remove());
        System.out.println(ml);
    }
}
代码语言:javascript复制



[,,,,,,,,,十一]

Process finished with exit code 

测试了一下还是蛮好用的,一个乞丐版的写了一个小时,还是太菜了!!!

0 人点赞