import java.util.Arrays;
class ObjectArrayDemo
{
public static void main(String[] args)
{
MonkeyManager mm = new MonkeyManager();
mm.add(new Monkey("悟空",'公'));
mm.add(new Monkey("悟饭",'公'));
mm.add(new Monkey("小白",'母'));
mm.list();
System.out.println("--------------------------");
mm.delete("悟饭");
mm.list();
System.out.println("--------------------------");
mm.find("小白");
Monkey m1 = mm.find("小白");
m1.print();
System.out.println("--------------------------");
Monkey m2 = new Monkey("小白",'公');
mm.update(m2);
mm.list();
System.out.println("--------------------------");
mm.add(new Monkey("小黑",'公'));
mm.add(new Monkey("小红",'母'));
mm.add(new Monkey("小黑",'公'));
mm.add(new Monkey("小红",'母'));
mm.list();
}
}
//Monkey管理类
class MonkeyManager{
private Monkey[] monkeys = new Monkey[3];
private int count = 0;//当前对象的个数
//添加Monkey
public void add(Monkey m){
//当数组空间不足,需要进行动态扩展
if(count>=monkeys.length){
//新数组的长度(当前数组长度的一半左右)
int newlen = (monkeys.length*3)/2+1;
monkeys = Arrays.copyOf(monkeys,newlen);
}
monkeys[count] = m;
count++;
/*if(count<monkeys.length){
monkeys[count] = m;
count++;
}else{
System.out.println("空间已满");
}*/
}
//删除Monkey
public void delete(String name){
for(int i=0;i<count;i++){
//equals:表示比较两个字符串的值是否相等,为什么用equals呢?因为对象存放在堆里面而且==比较在栈里面
//==表示比较两个对象的内存地址
if(monkeys[i].getName().equals(name)){
//循环把后面对象往前移动
for(int j=i;j<count-1;j++){
monkeys[j] = monkeys[j+1];
}
//吧最后一个元素赋值为null
monkeys[count-1] = null;
count--;
}
}
}
//查找
public Monkey find(String name){
for(int i=0;i<count;i++){
if(monkeys[i].getName().equals(name)){
return monkeys[i];
}
}
return null;
}
//修改Monkey
public void update(Monkey monkey){
Monkey m = find(monkey.getName());
if(m!=null){
m.setSex(monkey.getSex());
}
}
//遍历对象数组
public void list(){
for(int i=0;i<count;i++){
monkeys[i].print();
//System.out.println(monkeys[i]);
}
}
}
class Monkey{
private String name;
private char sex;
public Monkey(){}
public Monkey(String name,char sex){
this.name= name;
this.sex = sex;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setSex(char x){
this.sex = sex;
}
public char getSex(){
return sex;
}
public void print(){
System.out.println("name="+name);
}
}