• 自定义集合类


    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);
            }
    
        }
    }
  • 相关阅读:
    [BZOJ1934][Shoi2007]Vote 善意的投票[最小割]
    [BZOJ1066][SCOI2007]蜥蜴[最大流]
    [BZOJ2818][P2568]Gcd[欧拉函数]
    [BZOJ2208][P4306][JSOI2010]连通数[bitset优化floyd]
    [BZOJ1877][SDOI2009]晨跑[最大流+费用流]
    [BZOJ1040][P2607][ZJOI2008]骑士[树形DP+基环树]
    [BZOJ5347]冒泡排序[思维]
    [BZOJ2875][Noi2012]随机数生成器[等比数列求和+取模]
    [bzoj2809] 派遣
    [bzoj1965] 洗牌
  • 原文地址:https://www.cnblogs.com/hbxZJ/p/15811242.html
Copyright © 2020-2023  润新知