书接上文
废话不多说,看代码
import java.util.Arrays;
public class a
{
public static void main(String[] args)
{
System.out.println("-------------add--------------");
ChickenManager chicken = new ChickenManager(-3);
chicken.add(new Chicken(1, "老一", 3));
chicken.add(new Chicken(2, "老二", 2));
chicken.add(new Chicken(3, "老三", 3));
chicken.add(new Chicken(4, "老四", 5));
chicken.add(new Chicken(5, "老五", 1));
chicken.add(new Chicken(6, "老六", 1));
System.out.println(chicken.length());
System.out.println("-------------print--------------");
chicken.printAll();
System.out.println("-------------find--------------");
Chicken c = chicken.find(3);//比如要找的是3号鸡
c.print();
System.out.println("-------------update--------------");
Chicken newChicken = new Chicken(1, "老凌", 6);
chicken.update(newChicken);
Chicken cc = chicken.find(1);//比如要找的是1号鸡
cc.print();
System.out.println("-------------delete--------------");
chicken.delete(3);
chicken.printAll();
}
}
//小鸡类(数据对象)
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 void setId(int id)
{
this.id = id;
}
public void setName(String name)
{
this.name = name;
}
public void setAge(int age)
{
this.age = age;
}
public int getId()
{
return id;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
public void print()
{
System.out.println("id = " + id + " name = " + name + " age = " + age);
}
}
//小鸡管理类
class ChickenManager
{
private Chicken[] chicken = null; //首先定义一个空鸡窝
private int count = 0; //记录当前数组的元素个数(也是下标)
public ChickenManager(int size) //定义鸡窝大小
{
if(size <= 0)
{
chicken = new Chicken[5]; //如果输入一个负数,则我们定义一个鸡窝大小为5
}
else
{
chicken = new Chicken[size];
}
}
public int length()
{
return chicken.length;
}
//添加(里面实现了动态数组)
public void add(Chicken c)
{
if(count >= chicken.length)
{//这时候鸡窝已满,需要扩建
//扩建方法1:扩建到原数组长度的1.5倍:a.length * 3 / 2 + 1
//扩建方法2:扩建到源数组长度的2倍:a.length * 2
//我们用第二种方法
int newLen = chicken.length * 2;
chicken = Arrays.copyOf(chicken, newLen);
}
//然后下面扩不扩充都要添加
chicken[count] = c;
count++;
}
//删除:根据ID号来删除小鸡
public void delete(int id)
{
/*数组删除小鸡:如果下标从0~7,8个鸡窝,要是删除下标为5的6号鸡窝,需要把6、7下标往前移动一位,
如:下标:0 1 2 3 4 5 6 7,删除下标5,则变成0 1 2 3 4 6 7,5消失,再把6、7往左移:0 1 2 3 4 6 7,
这个时候,count需要--*/
for(int i = 0; i < count; i++)//首先找到这个ID
{
if(chicken[i].getId() == id)//找到了ID
{
for(int j = i; j < count-1; j++)//定义j等于i,此时i就是要删除的下标,这时候count是接着要加入的Chicken c,所以应小于count-1
{
chicken[j] = chicken[j+1];把后面那个鸡窝放进前面那个鸡窝
}
chicken[count-1] = null;//最后一个设为空
count--;//总数减减
break;
}
}
}
//更改小鸡(姓名、年龄),所以要给此方法一个ID
public void update(Chicken c)//新封装一个鸡
{
Chicken temp = find(c.getId());//把新封装c的ID拿过来,先找到这只鸡的名字年龄,用temp接受
if(temp != null)//如果找到这只鸡,直接修改名字和年龄
{
temp.setName(c.getName());
temp.setAge(c.getAge());
}
}
//查找
public Chicken find(int id)
{
boolean bool = true;
for(int i = 0; i < count; i++)//这里查找鸡的时候,鸡的总数不是a.length,而是counrt
{
if(chicken[i].getId() == id)
{
bool = false;
return chicken[i];//找到了,返回id
}
}
return null;//找不到,返回空
}
//输出所有
public void printAll()
{
for(int i = 0; i < count; i++)//应该使用count而不是length
{
chicken[i].print();
}
}
}
/*
结果:
-------------add--------------
10
-------------print--------------
id = 1 name = 老一 age = 3
id = 2 name = 老二 age = 2
id = 3 name = 老三 age = 3
id = 4 name = 老四 age = 5
id = 5 name = 老五 age = 1
id = 6 name = 老六 age = 1
-------------find--------------
id = 3 name = 老三 age = 3
-------------update--------------
id = 1 name = 老凌 age = 6
-------------delete--------------
id = 1 name = 老凌 age = 6
id = 2 name = 老二 age = 2
id = 4 name = 老四 age = 5
id = 5 name = 老五 age = 1
id = 6 name = 老六 age = 1
*/
这里面是用了动态数组:
1、数组是一种线性数据结构
2、数组不适合做删除插入操作,适合添加、查找、遍历
其实数组也是一个集合