美文网首页
数组扩充

数组扩充

作者: 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);
    }
}

相关文章

  • 数组扩充

  • 11月29日—c语言篇

    今天上午主要是对例题的讲解,和数组的扩充,把一维数组扩充到了二维数组,关于删除数据的例题讲解,老师先是书写了同学的...

  • 中级和函数

    二 加强阶段重点学习方向 1,数组公式(将函数和数组结合) 数组公式可以认为是Excel对公式和数组的一种扩充,换...

  • numpy.array数组扩充

    数组扩充np.repeat np.repeat(array, repeats, axis) 感觉没什么用,沿着各个...

  • java实现动态数组

    动态数组代码: 测试代码: 测试结果: 在数组容量已经满了的时候再添加一个元素,会自动扩充容量; 在数组容量已经满...

  • Numpy库①

    numpy是一个开源python扩充程序库,提供了高性能数组与矩阵运算处理能力。 一、ndarray多维数组 1....

  • Numpy

    NumPy ( Numerical Python)是支持 Python 语言的数值计算扩充库,其拥有强大的多维数组...

  • Java (集合 Collection)

    Collection 概念:动态对象的数组,对象内容 任意扩充。 Collection 接口是层次结构的根接口。而...

  • NumPy 快速入门

    1、Numpy介绍 NumPy是Python语言的一个扩充程序库。支持高阶大量的维度数组与矩阵运算,此外也针对数组...

  • 机器学习三剑客之Numpy

    Numpy NumPy是Python语言的一个扩充程序库。支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供...

网友评论

      本文标题:数组扩充

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