美文网首页
用对象数组模仿ArrayList的部分功能

用对象数组模仿ArrayList的部分功能

作者: 邪恶的正派 | 来源:发表于2020-05-05 11:55 被阅读0次

    多年前写过的一个demo,仅供参考,如有不正确,望多谅解!具体代码如下:

    public class MyArrayList {
        // 1.定义一个对象数组并且初始化长度为10
        public Object myArrayList[] = new Object[10];
        
        // 2.创建方法
        /*************************************************/
        /*************************************************/
        //第一:添加的方法,根据具体元素添加
        /**
         * 添加元素的方法
         * @param e 添加的数据
         */
        public void add(Object e) {
            int index = -1;     //用于记录插入数据在数组中的位置
            for (int i = 0; i < myArrayList.length; i++) {
                //如果数组中有空的位置,那么可以向数组中添加数据
                if(myArrayList[i] == null){
                    index = i;
                    break;
                }
            }
            //当数组还没满,可以向数组中添加数据
            if(index != -1){
                myArrayList[index] = e;
            }else {
                // 该数组用于数组动态增长
                Object newMyArrayList[] = new Object[myArrayList.length+myArrayList.length/2];
                //将数组中的值复制到新数组中
                for (int i = 0; i < myArrayList.length; i++) {
                    newMyArrayList[i] = myArrayList[i];
                }
                //将数组放在新数组中空的位置
                for (int i = 0; i < newMyArrayList.length; i++) {
                    if(newMyArrayList[i] == null){
                        newMyArrayList[i] = e;
                        break;
                    }
                }
                //数组关联
                myArrayList = newMyArrayList;
            }
        }
    
        
        /*************************************************/
        /*************************************************/
        // 第二:根据下标值往数组里添加
        /**
         * 根据指定下标值往数组里添加元素
         * @param index 下标值
         * @param e 具体的元素
         */
        public void add(int index,Object e) throws IndexOutOfBoundsException {
            if(index < size()){ 
                //元素后移
                for (int i = myArrayList.length-1; i > index; i--) {
                    myArrayList[i] = myArrayList[i-1];
                }
                myArrayList[index] = e;
            }else{
                throw new IndexOutOfBoundsException("Index: " + index + ",Size: " + size());
            }
        }
        
        
        /*************************************************/
        /*************************************************/
        // 第三:移除数组中元素
        /**
         * 移除元素的方法
         * @param e 移除的元素
         */
        public void remove(Object e) {
            int index = -1;       //要删除元素的下标值
            for (int i = 0; i < myArrayList.length; i++) {
                if(myArrayList[i] != null && myArrayList[i] == e){
                    index = i;
                }
            }
            //如果删除的是数组最后一位,那位置不用移动
            if(index == myArrayList.length -1){
                myArrayList[index] = null;
            }else if(index == -1){
                
            }else{
                //定义一个新的数组用来保存删除过后的元素
                Object[] newArrayList = new Object[myArrayList.length];
                /**
                 * 如果删除的位置在中间某个元素,那么在index之前的元素不用移动位置
                 * 在index后的元素需要移动位置
                 */
                for (int i = 0; i < myArrayList.length; i++) {
                    if (i < index) {
                        newArrayList[i] = myArrayList[i];
                    }
                    if (i > index) {
                        newArrayList[i - 1] = myArrayList[i];
                    }
                }
                //关联
                myArrayList = newArrayList;
            }
        }
        
        
        /*************************************************/
        /*************************************************/
        // 第四:查找指定下标元素
        /**
         * 查找指定下标元素
         * @param index 指定下标值
         * @return 指定元素
         */
        public Object get(int index) throws IndexOutOfBoundsException {
            Object object = null;
            if(index < size()){
                for (int i = 0; i < myArrayList.length; i++) {
                    if(myArrayList[index] == myArrayList[i]){
                        object = myArrayList[i];
                        break;
                    }
                }
            }else{
                throw new IndexOutOfBoundsException("Index: " + index + ",Size: " + size());
            }
            return object;
        }
    
        
        /***************************************************************/
        /***************************************************************/
        /**
         * 返回数组中非空元素个数
         * @return 有效元素个数
         */
        public int size() {
            int num = 0;
            for (int i = 0; i < myArrayList.length; i++) {
                if(myArrayList[i] != null){
                    num++;
                }
            }
            return num;
        }
        
    }
    

    测试功能类:

    public class MyArrayListTest {
        public static void main(String[] args) {
            // 1.创建4个企鹅对象
            Pet pet1 = new Penguin("楠楠", "Q妹");
            Pet pet2 = new Penguin("男男", "Q仔");
            Pet pet3 = new Penguin("花花","Q妹");
            Pet pet4 = new Penguin("华华", "Q仔");
            //创建MyArrayList对象
            MyArrayList myArrayList = new MyArrayList();
            // 2.创建ArrayList并且将4个企鹅对象放入其中
            myArrayList.add(pet1);
            myArrayList.add(pet2);
            myArrayList.add(pet3);
            myArrayList.add(1,pet4);
            // 3.查看企鹅数量
            System.out.println("共有企鹅" + myArrayList.size() + "只.");
            // 4.遍历所有企鹅
            System.out.println("分别是:");
            for (int i = 0; i < myArrayList.size(); i++) {
                Penguin penguin = (Penguin)myArrayList.get(i);
                penguin.print();
            }
            // 5.删除集合中部分元素
            myArrayList.remove(0);
            myArrayList.remove(pet3);
            // 6.显示删除后的信息
            System.out.println("\n删除之后还有企鹅" + myArrayList.size() + "只.");
    
            System.out.println("分别是:");
            for (int i = 0; i < myArrayList.size(); i++) {
                Penguin penguin = (Penguin)myArrayList.get(i);
                penguin.print();
            }
    //      myArrayList.add("a");
    //      myArrayList.add("b");
    //      myArrayList.add("c");
    //      myArrayList.add("d");
    //      myArrayList.add("e");
    //      myArrayList.add("f");
    //      myArrayList.add("g");
    //      myArrayList.add("h");
    //      myArrayList.add("i");
    //      myArrayList.add("j");
    //      myArrayList.add("k");
    //      myArrayList.add("l");
    //      myArrayList.add(10, "可以吗");
    //      System.out.println("集合中共有元素个数:"+myArrayList.size());
    //      System.out.println("删除以前,共有元素:");
    //      for (int i = 0; i < myArrayList.size(); i++) {
    //          System.out.print(myArrayList.get(i) + "\t");
    //      }
    //      System.out.println();
    //      System.out.println("删除一个元素");
    //      myArrayList.remove("k");
    //      System.out.println();
    //      System.out.println("集合中共有元素个数:"+myArrayList.size());
    //      System.out.println("删除之后的元素:");
    //      for (int i = 0; i < myArrayList.size(); i++) {
    //          System.out.print(myArrayList.get(i) + "\t");
    //      }
        }
    }
    

    另附对象类,抽象宠物类

    /**
     * 
     * @功能: 描述宠物的信息
     * @作者:   
     * @时间:2014-4-27
     * @地点: 
     * @Version 1.0
     */
    
    public abstract class Pet {
        // 1.定义属性
        private String name;          //昵称
        private int health = 100;    //健康值
        private int love;            //亲密度
        
        // 2.建构造器
        // 获取昵称
        public String getName() {
            return name;
        }
        /**
         * 设置昵称
         * @param name
         */
        public void setName(String name){
            this.name = name;
        }
        // 获取健康值
        public int getHealth() {
            return health;
        }
        /**
         * 设置健康值
         * @param health
         */
        public void setHealth(int health){
            this.health = health;
        }
        // 获取亲密度
        public int getLove() {
            return love;
        }
        /**
         * 设置亲密度
         * @param love
         */
        public void setLove(int love){
            this.love = love;
        }
        
        // 3.构造函数
        /**
         * 无参的构造方法
         */
        public Pet(){
            
        }
        /**
         * 带参的构造方法
         * @param name
         */
        public Pet(String name ){
            this.name = name;
        }
        
        // 4.创建方法
        /**
         * 创建宠物吃的抽象方法
         */
        public abstract void eat();
        
        /**
         * 显示宠物信息的方法
         */
        public abstract void print();
    }
    
    

    继承宠物类,重写父类方法

    /**
     * 
     * @功能: 描述企鹅的信息
     * @作者:    
     * @时间:2014-4-27
     * @地点: 
     * @Version 1.0
     */
    public class Penguin extends Pet{
        // 1.定义属性
        private String sex;     //性别
        /**
         * 获取性别
         * @return
         */
        public String getSex() {
            return sex;
        }
        /**
         * 设置性别
         * @param sex
         */
        public void setSex(String sex) {
            this.sex = sex;
        }
        private String id;  //编号
        /**
         * 获取编号
         * @return 编号
         */
        public String getId() {
            return id;
        }
        /**
         * 设置编号
         * @param id 编号
         */
        public void setId(String id) {
            this.id = id;
        }
        // 2.构造函数
        /**
         * 无参的构造函数
         */
        public Penguin() {
        }
        /**
         * 带参的构造方法
         * @param name 名字
         * @param sex 性别
         */
        public Penguin(String name,String sex){
            super(name);
            this.sex = sex;
        }
        /**
         * 三个参数的带参构造方法
         * @param id 编号
         * @param name 名字
         * @param sex 性别
         */
        public Penguin(String id,String name,String sex){
            super(name);
            this.id = id;
            this.sex = sex;
        }
        @Override
        /**
         * 重写父类方法,实现企鹅吃的方法
         */
        public void eat() {
            if(getHealth() >= 100){
                System.out.println("企鹅"+ getName() + "吃饱了!" );
            }else{
                setHealth(getHealth()+4);
                System.out.println("企鹅"+ getName() + "吃饱了!健康值加4。" );
            }
        }
        /**
         * 企鹅游泳的方法
         */
        public void swimming(){
            System.out.println("企鹅" + getName()+"正在游泳!");
            setHealth(getHealth()-10); //健康值减少10
            setLove(getLove() + 5);    // 亲密度增加5
        }
        /**
         * 重写父类方法,显示企鹅信息的方法
         */
        public void print(){
            System.out.println(super.getName() + "\t" + this.getSex());
        }
        
    }
    

    相关文章

      网友评论

          本文标题:用对象数组模仿ArrayList的部分功能

          本文链接:https://www.haomeiwen.com/subject/ibfmghtx.html