您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
javase第二季学习笔记-对象数组
发布时间:2017-07-10 14:14:40编辑:雪饮阅读()
import java.util.Arrays;
public class NewKeywordDemo
{
public static void main(String[] args){
MonkeyManager mm=new MonkeyManager();
mm.add(new Monkey("悟空",'公'));
mm.add(new Monkey("午饭",'公'));
mm.add(new Monkey("小白",'母'));
mm.add(new Monkey("小亮",'母'));
mm.add(new Monkey("小刚",'男'));
mm.add(new Monkey("小雪饮",'男'));
//对象在数组中存储是存储的引用地址。
System.out.println("遍历数组(所有对象的引用地址):");
mm.list();
System.out.println("遍历数组(所有对象的属性值):");
mm.listData();
System.out.println("删除测试:");
mm.delete("小白");
System.out.println("遍历数组(删除某个元素后所有对象的属性值):");
mm.listData();
mm.add(new Monkey("小白",'母'));
System.out.println("查找测试:");
Monkey m1=mm.find("悟空");
m1.print();
System.out.println("修改测试:");
Monkey m2=new Monkey("小白",'公');
mm.update(m2);
mm.listData();
}
}
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;
//将原数组copy并生成新数组
monkeys=Arrays.copyOf(monkeys,newLen);
System.out.println("空间已满,已动态生成数组");
}
if(count<monkeys.length){
monkeys[count]=m;
count++;
}
}
//遍历对象数组
public void list(){
for(int i=0;i<count;i++){
System.out.println(monkeys[i]);
}
}
//遍历对象数组(非引用地址)
public void listData(){
for(int i=0;i<count;i++){
monkeys[i].print();
}
}
//从对象数组中删除其中一个对象
public void delete(String name){
for(int i=0;i<count;i++){
/*
equals:表示比较两个字符串对象的值是否相等
==表示比较两个对象的内存地址是否相同
这里接收的字符串是单独的字符串对象,而数组中某个对象的name的内存地址则和该对象的内存地址一致。
所以如果使用==来比较,则永远都会出现相同的情况。
*/
if(monkeys[i].getName().equals(name)){
//当前值被删除了,所以当前索引位置的值应该被其后索引的值覆盖,以此类推,将后面所有的数组元素都向前移动
for(int j=i;j<count-1;j++){
monkeys[j]=monkeys[j+1];
}
//所有元素移动完毕后,则最后一个元素设置为空的。
monkeys[count-1]=null;
//最后要将count计数的变量值也要同时减1
count--;
break;
}
}
}
//查找
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){
/*
接收传递来的对象,然后获取该对象的name,并将获取的name在对象数组中查询
对象数组查询若存在就返回引用地址,否则就返回null
*/
Monkey m=find(monkey.getName());
if(m!=null){
//在对象数组中查询到的引用地址中的对象的sex属性修改为传递进来的这个对象的sex属性
m.setSex(monkey.getSex());
}
}
}
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 sex){
this.sex=sex;
}
public char getSex(){
return sex;
}
public void print(){
System.out.println("name="+name+"sex="+sex);
}
}
关键字词:javase,对象数组