3.1.1 记事本的例子

用顺序容器,做一个记事本

●能存储记录

●不能限制能存储的记录数量

●能知道已经存储的 记录的数量

●能查看存进去的每一条记录

●能删除一条记录

●能列出所有记录

接口设计

●add(String note);

●getSize();

●getNote(int index);

●removeNote(int index);

●list();

把业务逻辑和数据分开,我们现在只考虑,数据传入了,我们应该怎样处理,至于如何传入的,

是上层的业务,不是我们关心的。

所以我们首先创建一个类,然后定义接口:

public class NoteBook{
	public void add(String s){

	}
	
	public int gerSize(){
		return 0;
	}
	
	public String getNote(int index){
		return "";
	
	public boolean removeNote(int index){
		return true;
	}
	publci String[] list(){

	}
	
}

接口创建好了,那我们如何存储数据呢?我们知道有数组,但是数组长度不可变,并且不能按照

我们所想的那样在制定位置存储。

所以我们需要一个容器:

import java.util.ArrayLiat;


我现在引入了一个类,现在这个类是在  java。util  这个包,包里的这个类的名字叫做ArrayList


private ArrayList<String> notes = new ArrayList<String>();


在这个类的名字后面紧接着跟着  <String>

我们叫做ArrayList  of   String  ,就是用来存放String 的那个ArrayList

这种类型叫做泛型类,是一种容器

容器类

●ArrayList<String>   notes = new ArrayList<String>;

●容器类有两个类型:

        •容器的类型  例如这个:ArrayList

        •元素的类型        ag:  <String>

 •这个notes 是容器的名称

需要传入指定类型的元素:

ArrayList<String>   notes = new ArrayList<String>;

public void add(String s){

        notes.add(s);        //放String类型可以

        note.add(10);               //不符合元素类型,报错

}

如何知道传入多少个元素呢?

我们用  

容器名.size();

例如:

public void getSize(){

        return notes.size();

}

然后调用,去主函数:

public static void main(String [] args){

        NoteBook   nb = new NoteBook();

        nb.add("first");

        nb.add(second);

        System.out.println(nb.getSize());

}


先创建对象,然后调用成员函数

 我们调试的时候会发现,东西是有顺序的,ArrayList这个容器泛型,会按顺序把输入进去的值

存储,也就是按照下标从 0 开始。

那么我们想得到容器 几号元素的东西是什么?也可以通过传入下标,然后获取元素

我们可以通过,成员函数

public String getNote (int index){

        return notes.get(intdex);

}


通过返回  对象名 . get(index);  

index 是存储下标


然后在主函数调用输出:

System.out.println (nb.getNote(1));

对象名.成员函数名(参数);

注意,查询不能越界。

如果我们想把元素插入到特定位置上,同样有办法(如果原来那个位置上有元素,会被推到后面的坐标)

对象名 .  add(下标 , 元素);

public  void add(String s, int location){
    notes.add(location,s);
}

然后在主函数里面调用:

public static void main(String [] args){
    NoteBook nb = new NoteBook();
    nb.add("Thies",5);
}

记得传入的参数,和成员函数的参数类型对应

●删除容器指定元素

        •构建成员函数

public void removeNote(int index){
    return note.remove(index);
}

调用

public static void main(String [] args){
    NoteBook nb = new NoteBook();
    nb.removeNote(5);
}

输出容器元素

第一种方法是,用一个数组复制,然后遍历输出

wo

public String[] list(){
    String[] a = new String[notes.size()];
    for(int i = 0; i<notes.size(); i++){
            a[i] = notes.get(i);
    }
    return a;
}

我们这里在成员函数里面创建了一个数组对象,来了一个for 循环来帮助我们填充数组

其实还有另一种方法

public String[] list(){
    String[] a = new String[notes.size()];
    
    notes.toArray(a);
    return a;
}

这样通过  容器名.toArray(数组名);

就实现了遍历填充

接着,调用输出就可以了

public static void main(String [] args){
    NoteBook nb = new NoteBook();
    String[] a = nb.list();
    for( String s : a){
        System.out.println(s);
    }
}

讨论:

究竟把什么放进了容器里去了?

当我们用add函数把对象放进容器中去的时候,究竟是把什么放进了容器?放进去的是对象本身吗?放进去以后,那个对象还在外面吗?如果修改了放进去的那个对象,容器中的对象会变化吗?写点代码来验证自己的猜测吧。

答案:容器里元素的类型是对象,对象是引用类型,那存放在容器里的内容相当于对象的变量,也就是对象的管理者。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值