import java.util.Arrays;
/**
* 对象数组就是数组里面的每一个元素都是类的对象,赋值时先定义对象,然后将对象赋给数组
* 动态数组,数组不适合删除插入操作,适合添加,查找,遍历
*/
public class ArrObjectDemo {
public static void main(String[] args) {
ChickenManager cm = new ChickenManager(5);
cm.add(new Chicken(1, "小小", 40));
cm.add(new Chicken(2, "小小2", 41));
cm.add(new Chicken(3, "小小3", 42));
cm.add(new Chicken(4, "小小4", 43));
cm.add(new Chicken(5, "小小5", 44));
// 第6个会造成数组的扩充,这种称之为动态数组
cm.add(new Chicken(6, "小小6", 44));
// 这里数组长度变成了10了,因为我们cs.length*2了,扩充了
System.out.println("数组的长度:" + cm.length());
System.out.println("--------查找所有------------");
cm.printAll();
System.out.println("--------查找指定的小鸡-----------");
Chicken c = cm.find(6);
c.print();
System.out.println("--------修改-----------——");
cm.upadae(new Chicken(1, "下蛋公鸡", 10));
cm.printAll();
}
}
class ChickenManager {
private Chicken[] cs = null;
//记录当前数组的元素个数
private int count = 0;
public ChickenManager(int size) {
if (size > 0) {
cs = new Chicken[size];
} else {
cs = new Chicken[5];
// 如果我添加超过5个怎么办?上面的不要了在来个大的
}
}
public int length() {
return cs.length;
}
/*
* 实现动态数组
* */
public void add(Chicken chicken) {
if (count >= cs.length) {
// 数组已经满了,需要扩充
// 算法一,扩充原来数组大小的一半左右 基数+1 cs.length*3/2+1
// 算法二,原来数组的一倍 cs.length*2
// 数组copy
int newLen = cs.length * 2;
cs = Arrays.copyOf(cs, newLen);// 1.原数组,
}
cs[count] = chicken;
count++;
}
/*
* 删除,如果把某个元素位置删除掉,之后的要往前移动,下标减一
* */
public void delete(int id) {
for (int i = 0; i < count; i++) {
if (cs[i].getId() == id) {
// i就是元素的位置,比如删除了第3个位置,后面的要往前移就这个算法
// 找到了删除的对象,把对象之后的向前移动
for (int j = i; j < count - 1; j++) {
cs[j] = cs[j + 1];
}
// 在把最后一个赋值为null(删除)
cs[count - 1] = null;
// 下标减-
count--;
break;
}
}
}
/*
* 更新要有条件,id不能改,把名字和年龄封装成对象传递过来
* */
public void upadae(Chicken ca) {
Chicken temp = find(ca.getId());
if (temp != null) {
temp.setName(ca.getName());
temp.setAge(ca.getAge());
}
}
/*查找,根据id来查找小鸡*/
public Chicken find(int id) {
for (int i = 0; i < count; i++) {
// 数组中的哪一只小鸡,等于你给传递进来想要查找的小鸡,你传入进来的小鸡在这个篮子里面有就返回查找的小鸡
if (cs[i].getId() == id) {
return cs[i];
}
}
return null;
}
public void printAll() {
for (int i = 0; i < count; i++) {
cs[i].print();
}
}
}
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:" + id + ",name=" + name + ",age=" + age);
}
}
网友评论