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