用顺序容器,做一个记事本
●能存储记录
●不能限制能存储的记录数量
●能知道已经存储的 记录的数量
●能查看存进去的每一条记录
●能删除一条记录
●能列出所有记录
接口设计
●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函数把对象放进容器中去的时候,究竟是把什么放进了容器?放进去的是对象本身吗?放进去以后,那个对象还在外面吗?如果修改了放进去的那个对象,容器中的对象会变化吗?写点代码来验证自己的猜测吧。
答案:容器里元素的类型是对象,对象是引用类型,那存放在容器里的内容相当于对象的变量,也就是对象的管理者。