zoukankan      html  css  js  c++  java
  • 自定义集合类

    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);
            }
    
        }
    }
  • 相关阅读:
    “王者对战”之 MySQL 8 vs PostgreSQL 10
    PostgreSQL 进程结构
    Linux core dump 诊断进程奔溃退出
    linux下core dump--转载
    2.4 等比数列
    2.3 等差数列的前n项和
    2.2 等差数列
    1.1.1 三角形正弦定理
    调整颜色
    去括号法则
  • 原文地址:https://www.cnblogs.com/hbxZJ/p/15811242.html
Copyright © 2011-2022 走看看