java基础之动态对象数组[19]

发布于:2023-01-11 ⋅ 阅读:(366) ⋅ 点赞:(0)

java基础之动态对象数组[19]




一、动态对象数组

动态数组本质是创建新的数组进行无限扩容
与工具类ArraysList源码相似

二、对象类的定义

class ball{
 	   private int id;
       private String name;
       private int money;
       public ball(){};
       public ball(int id,String name,int money){
           this.name=name;
           this.money=money;
           this.id=id;
       }
       public void setId(int id){
           this.id=id;
       }
       public int getId(){
           return id;
       }

       public String getName() {
           return name;
       }

       public void setName(String name) {
           this.name = name;
       }

       public int getMoney() {
           return money;
       }

       public void setMoney(int money) {
           this.money = money;
       }
       public void printOne(){
           System.out.println("id:"+id+" 名称:"+name+" 价格:"+money);
       }
   }

三.动态管理对象类的类

其中实现了扩容算法,详细可见代码注释

 class ballManage{
     private ball[] balls=new ball[5];
     private static int count=0;
     public ballManage(){};
     //添加
     public void add(ball b){
         //动态数组,如果长度大于现有数组,就进行数组扩容
         if (balls.length-1<count){
             //将旧数组复制到新数组,并赋值新的长度,扩容算法1:count*3/2+1,扩容多原来的一半
             balls= Arrays.copyOf(balls,count*2);//扩容多原来一倍
             System.out.println(balls.length);
         }
         balls[count]=b;
         count++;
     };
     //删除
     public void del(int id){
         for (int i=0;i<count;i++){
             if (balls[i].getId()==id){
                 //将数据删除之后,被删除的位置不能是null,所以我们要把后面的补到前面去
                 balls[i]=balls[count-1];
                 //补到前面去的数据当前位置就赋值为空
                 balls[count-1]=null;
                 count--;
             }
         }
     };
     //更新
     public void upd(ball b){
         for (int i=0;i<count;i++){
             //判断要修改的数据存在数组中
             if (balls[i].getId()==b.getId()){
                 balls[i].setName(b.getName());
                 balls[i].setMoney(b.getMoney());
             }
         }
     };
     //单个查询
     public ball getBall(int id){
         for (int i=0;i<count;i++){
             if (balls[i].getId()==id){
                 return balls[i];
             }
         }
         return null;
     };
     //查询所有
     public void BallAll(){
         for (int i=0;i<count;i++){
             balls[i].printOne();
         }
     };
 }

四.动态对象数组类的实现

ballManage ballManage=new ballManage();

ballManage.add(new ball(1,"红星",12));
ballManage.add(new ball(2,"蓝星",12));
ballManage.add(new ball(3,"黄星",12));
ballManage.add(new ball(4,"橙星",12));
ballManage.add(new ball(5,"绿星",12));
ballManage.add(new ball(6,"紫星",12));
ballManage.del(1);
ballManage.upd(new ball(6,"新星",14));
ballManage.BallAll();
ballManage.getBall(2).printOne();

五.小结

本章概述了java中的动态数组的实现,与ArraysList源码很相似,了解动态数组是如何实现的就好,还有扩容算法的实现.一般会有面试题.
有哪里不足或者有更好的建议,欢迎留言吐槽,有哪里不懂的小伙伴,可以私信我,我会一一答复,感谢认可,感谢支持!


网站公告

今日签到

点亮在社区的每一天
去签到