【Java随笔】对象数组、动态数组:自动扩容、删除

import java.util.Arrays;
/*
* 对象数组:数组中存放对象。
* 1.动态数组————>集合ArrayList
* (1)自动扩容:记录添加数组的下标,与数组长度比较,当小于等于时,自动扩容(方便:增加、查找)
* (2)删除某一位置元素,之后元素要前移一位,最后一位赋值为空(麻烦:删除)
* */

public class Test1 {
    public static void main(String[] args) {
        ChickenManager cm = new ChickenManager(5);
        cm.add(new Chicken(1,"a",1));
        cm.add(new Chicken(2,"b",2));
        cm.add(new Chicken(3,"c",3));
        cm.add(new Chicken(4,"d",4));
        cm.add(new Chicken(5,"e",5));
        System.out.println(cm.length());
        cm.add(new Chicken(6,"f",6));
        System.out.println(cm.length());
        cm.print();
        System.out.println("----------------find----------");
        Chicken chicken = cm.find(5);
        chicken.print();
        System.out.println("----------------update----------");
        cm.update(new Chicken(1,"aaa",100));
        System.out.println("----------------delete----------");
        cm.delete(1);
        cm.print();

    }
}
//小鸡管理类
class ChickenManager{
    private Chicken[] cs = null;
    private int count = 0;//记录数组下标
    public ChickenManager(){}
    public ChickenManager(int size){//对象数组,当小鸡个数大于0时,根据数量创建。没有小鸡时,默认创建5个。
        if (size>0){
            cs = new Chicken[size];
        }else {
            cs = new Chicken[5];
        }
    }
    //数组长度
    public int length(){
        return cs.length;
    }
    //添加鸡笼,实现动态数组,自动扩容
    public void add(Chicken c){
        if (count>=cs.length){//记录的下标大于数组长度,需要扩容
            int newLen = cs.length*2;//直接扩充到原来数组长度的两倍
            cs = Arrays.copyOf(cs,newLen);//复制数组,在原来基础上扩容
            cs[count]=c;
            count++;
        }else {
            cs[count]=c;
            count++;
        }
    }
    //删除数组中某一位置元素删除,之后位置要往前挪动。(方便添加)
    public void delete(int id){
        for (int i = 0; i < count; i++) {
            if (cs[i].getId()==id){//找到要删除的对象,把之后的对象往前移动一位
                for (int j = i; j < count-1; j++) {
                    cs[j]=cs[j+1];
                }
                cs[count-1]=null;//把最后一个对象赋值为空(删除)
                count--;
                break;
            }
        }
    }
    //更新小鸡信息,年龄
    public void update(Chicken c){
        Chicken chicken = find(c.getId());
        chicken.print();
        if (chicken!=null){
            chicken.setName(c.getName());
            chicken.setAge(c.getAge());
        }
        chicken.print();
    }
    //查找小鸡
    public Chicken find(int id){
        for (int i = 0; i < count; i++) {
            if (cs[i].getId()==id){
                return cs[i];
            }
        }
        return null;
    }
    //输出所有
    public void print(){
       /* for (Chicken c:cs) {
            if (c!=null){
                c.print();
            }else {
                break;
            }
        }*/
        for (int i = 0; i < count; i++) {
            cs[i].print();
        }
    }

}
//小鸡类(根据对象的作用:数据对象value object、实体对象、传输对象)
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:"+this.id+"小鸡的名字:"+this.name+"小鸡的年龄:"+this.age);
    }
}

【千锋教育Java零基础全套视频教程(一学就会,java入门自学必备)】 https://www.bilibili.com/video/BV1FK4y1x7Ny/?p=51&share_source=copy_web&vd_source=fec080968f12b55fd38552bcd7731427

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值