JAVA:MyArraylist泛型自己实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Dian1pei2xiao3/article/details/82982102

MyArraylist :

public class MyArraylist <T> {
    private T[] arr;
    private int size;
    private static final int CAPACITY = 10;

    public MyArraylist() {
        this(CAPACITY);
    }

    public int getSize() {
        return size;
    }

    public MyArraylist(int n) {//判断n是否符合要求,需要异常处理
        size = 0;
        if (n < 0) {
            try {
                throw new Exception();
            } catch (Exception e) {
                System.out.println(n + "不能为负数");
            }
        }
        arr = (T[]) new Object[n];
    }

    private void grow() {
        int oldCapacity = arr.length;
        int newCapacity = oldCapacity + (oldCapacity >> 1);
        arr = Arrays.copyOf(arr, newCapacity);
    }

    private void isfull() {
        if (arr.length == size) {
            grow();
        } else {
            return;
        }
    }

    /**
     * 增:
     * 1.直接增加,等同尾插
     * 2.头插
     * 3.按照位置插入
     * 存在处理问题:判满;扩容;按照位置插入时需要判断index的范围
     * size++
     */
    public void add(T value) {
        isfull();
        arr[size++] = value;
    }

    public void addTead(T value) {
        isfull();
        System.arraycopy(arr, 0, arr, 1, size);
        arr[0] = value;
    }//用拷贝比用for循环平移时间复杂度低

    public void addTail(T value) {
        isfull();
        arr[size++] = value;
    }

    private void rangeCheck(int index) {
        if (index < 0 || index > arr.length) {
            return;
        }
    }

    public void addIndex(int index, T value) {//按索引插入
        rangeCheck(index);
        isfull();
        System.arraycopy(arr, index, arr, index + 1, size - index);
        arr[index] = value;
        size++;
    }

    /**
     * 删:
     * 1.按照位置删
     * 2.按照值删  ----->涉及查该值是否存在返回位置
     * 3.头删
     * 4.尾删
     * size--;
     * 内存泄漏null
     * 检查范围
     *
     */
    public T[] delIndex(int index) {//按照位置删
        rangeCheck(index);
        System.arraycopy(arr, index+1, arr, index , size - index);
        arr[size] = null;//防止内存泄漏
        size--;
        return arr;
    }
    public T[] delValue(T value){//按照值删
        int pos=findValue(value);
        if(pos!=-1){
            System.arraycopy(arr, pos+1, arr, pos, size - pos);
            arr[size]=null;
            size--;
        }
        return arr;
    }
    public void delHead(){//头删
        System.arraycopy(arr, 1, arr, 0, size-1);
        arr[size]=null;
        size--;
    }
    public void delTail(){//尾删
        arr[size]=null;
        size--;
    }

    /**
     * 改:
     * 按照位置改
     */
    public void  change(int index,T value){//按照位置改
        rangeCheck(index);
        arr[index]=value;
    }

    /**
     * 查:
     * 按照值查找---》返回位置
     * 按照位置查找-----》返回值
     *
     */
    public int findValue(T value){//按照值查找
        for(int i=0;i<size;i++){
            if(arr[i].equals(value)){
                return i;
            }
        }
        return -1;
    }
    public T findIndex(int index){
        rangeCheck(index);
        return arr[index];
    }

    /**
     * 显示
     */
    public void  show(){
        for(int i=0;i<size;i++){
            System.out.println(arr[i].toString());
        }
    }
}

People类:

class People{
    private String name;
    private int id;

    public People(String name, int id) {
        this.name = name;
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @Override
    public String toString() {
        return "People{" +
                "name='" + name + '\'' +
                ", id=" + id +
                '}';
    }
}

主函数:main

 public static void main(String args[]) {
        MyArraylist<People> list = new MyArraylist<People>(3);
        People p1 = new People("zs", 002);
        People p2 = new People("ls", 003);
        list.add(p1);
        list.add(p2);
        list.delValue(p1);
        list.show();
        System.out.println();
//        list.show();
        list.delIndex(1);
//        System.out.println(list.size());
//        list.show();
        System.out.println(list.findIndex(0));
//        System.out.println(list.getSize());


    }

猜你喜欢

转载自blog.csdn.net/Dian1pei2xiao3/article/details/82982102
今日推荐