美文网首页
数组扩充

数组扩充

作者: Liu积土成山 | 来源:发表于2020-01-17 21:57 被阅读0次
    import java.util.Arrays;
    
    /**
     * 对象数组就是数组里面的每一个元素都是类的对象,赋值时先定义对象,然后将对象赋给数组
     * 动态数组,数组不适合删除插入操作,适合添加,查找,遍历
     */
    public class ArrObjectDemo {
        public static void main(String[] args) {
            ChickenManager cm = new ChickenManager(5);
            cm.add(new Chicken(1, "小小", 40));
            cm.add(new Chicken(2, "小小2", 41));
            cm.add(new Chicken(3, "小小3", 42));
            cm.add(new Chicken(4, "小小4", 43));
            cm.add(new Chicken(5, "小小5", 44));
            // 第6个会造成数组的扩充,这种称之为动态数组
            cm.add(new Chicken(6, "小小6", 44));
            // 这里数组长度变成了10了,因为我们cs.length*2了,扩充了
            System.out.println("数组的长度:" + cm.length());
            System.out.println("--------查找所有------------");
            cm.printAll();
            System.out.println("--------查找指定的小鸡-----------");
            Chicken c = cm.find(6);
            c.print();
            System.out.println("--------修改-----------——");
            cm.upadae(new Chicken(1, "下蛋公鸡", 10));
            cm.printAll();
        }
    }
    
    class ChickenManager {
        private Chicken[] cs = null;
        //记录当前数组的元素个数
        private int count = 0;
    
        public ChickenManager(int size) {
            if (size > 0) {
                cs = new Chicken[size];
            } else {
                cs = new Chicken[5];
                // 如果我添加超过5个怎么办?上面的不要了在来个大的
            }
        }
    
        public int length() {
            return cs.length;
        }
    
        /*
        * 实现动态数组
        * */
        public void add(Chicken chicken) {
            if (count >= cs.length) {
                // 数组已经满了,需要扩充
                // 算法一,扩充原来数组大小的一半左右 基数+1   cs.length*3/2+1
                // 算法二,原来数组的一倍 cs.length*2
                // 数组copy
                int newLen = cs.length * 2;
                cs = Arrays.copyOf(cs, newLen);// 1.原数组,
            }
            cs[count] = chicken;
            count++;
        }
    
        /*
        * 删除,如果把某个元素位置删除掉,之后的要往前移动,下标减一
        * */
        public void delete(int id) {
            for (int i = 0; i < count; i++) {
                if (cs[i].getId() == id) {
                    // i就是元素的位置,比如删除了第3个位置,后面的要往前移就这个算法
                    // 找到了删除的对象,把对象之后的向前移动
                    for (int j = i; j < count - 1; j++) {
                        cs[j] = cs[j + 1];
                    }
                    // 在把最后一个赋值为null(删除)
                    cs[count - 1] = null;
                    // 下标减-
                    count--;
                    break;
                }
            }
        }
    
        /*
        * 更新要有条件,id不能改,把名字和年龄封装成对象传递过来
        * */
        public void upadae(Chicken ca) {
            Chicken temp = find(ca.getId());
            if (temp != null) {
                temp.setName(ca.getName());
                temp.setAge(ca.getAge());
            }
    
        }
    
        /*查找,根据id来查找小鸡*/
        public Chicken find(int id) {
            for (int i = 0; i < count; i++) {
                // 数组中的哪一只小鸡,等于你给传递进来想要查找的小鸡,你传入进来的小鸡在这个篮子里面有就返回查找的小鸡
                if (cs[i].getId() == id) {
                    return cs[i];
                }
            }
            return null;
        }
    
        public void printAll() {
            for (int i = 0; i < count; i++) {
                cs[i].print();
            }
        }
    }
    
    class Chicken {
        private int id;
        private String name;
        private int age;
    
        public Chicken() {
        }
    
        public Chicken(int id, String name, int age) {
            this.id = id;
            this.name = name;
            this.age = age;
        }
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public void print() {
            System.out.println("id:" + id + ",name=" + name + ",age=" + age);
        }
    }
    

    相关文章

      网友评论

          本文标题:数组扩充

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