自定义集合类

public interface List<E> {
    void add(E e);
    void remove(E e);
    void remove(int index);
    E indexOf(int index);
    int size();
    void clear();
    void set(int index,E e);
    int getIndex(E e);

    
}





import java.util.Arrays;
import java.util.Iterator;

/*
自定义集合类
* */
public class MyArrayList<E> implements List<E> {
    //存储集合元素的数组
    private Object[] arr;
    //集合中元素的数量
    private int size;

    public MyArrayList(){
        arr = new Object[5];
    }

    public MyArrayList(int capcity){
        arr = new Object[capcity];
    }

    private void checkIndex(int index){
        if (index<0||index>=size){
            throw new IndexOutOfBoundsException("下标越界了:"+index);
        }
    }

    @Override
    public void add(E e) {
        //检查是否扩容
        if (size>=arr.length){
            arr= Arrays.copyOf(arr,arr.length*2);
        }
        //数据添加到集合内size数量+1
        arr[size++]=e;
    }

    @Override
    public void remove(E e) {
        int index=getIndex(e);
        if (index==-1){
            throw new UnsupportedOperationException("没有此元素,不能删除");
        }
        remove(index);
    }

    @Override
    public void remove(int index) {
        checkIndex(index);
        System.arraycopy(arr,index+1,arr,index,size-index-1);
        arr[--size]=null;
    }

    @Override
    public E indexOf(int index) {
        checkIndex(index);
        return (E) arr[index];
    }

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

    @Override
    public void clear() {
        Object[] newArr=new Object[5];
        arr=newArr;
    }

    @Override
    public void set(int index, E e) {
        checkIndex(index);
        arr[index]=e;
    }

    @Override
    public int getIndex(E e) {
        //如果是null,采用==比较
        if (e==null){
            for (int i = 0; i < size; i++) {
                if (e==arr[i]){
                    return i;
                }
            }
        }else {
            //不是null,就采用equals()比较
            for (int i = 0; i < size; i++) {
                if (e.equals(arr[i])){
                    return i;
                }
            }
        }
        return -1;
    }

    @Override
    public String toString(){
        StringBuffer sbf= new StringBuffer("[");
        for (int i = 0; i <size ; i++) {
            if (i<size-1){
                sbf.append(arr[i]+",");
            }else {
                sbf.append(arr[i]+"]");
            }
        }
        return sbf.toString();
    }

    public Iterator<E> iterator(){
        return new Itr();
    }

    private class Itr implements Iterator<E>{

        private int cursor;
        @Override
        public boolean hasNext() {
            return cursor!=size;
        }

        @Override
        public E next() {
            return (E) arr[cursor++];
        }
    }


}



import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;


public class Demo5 {
    public static void main(String[] args) {
        MyArrayList<String> l = new MyArrayList<>();
        l.add("贾代化");
        l.add("贾代善");
        l.add(null);
        System.out.println(l.size());
        System.out.println(l.toString());
        System.out.println(l.getIndex("贾代善"));
        System.out.println(l.getIndex(null));//2
        l.remove(1);
        System.out.println(l.toString());//[贾代化,null]
        l.remove(null);
        System.out.println(l.toString());//[贾代化]

        l.add("贾敬");
        l.add("贾珍");
        l.add("贾蓉");
        System.out.println(l.indexOf(1));//贾敬

        l.set(1,"贾敷");
        System.out.println(l.toString());//[贾代化,贾敷,贾珍,贾蓉]

        //遍历
        Iterator<String> iterator = l.iterator();
        while (iterator.hasNext()){
            String ele=iterator.next();
            System.out.println(ele);
        }

    }
}
原文地址:https://www.cnblogs.com/hbxZJ/p/15811242.html