先立一个flag,以后每周博客更新两次,直到达成100篇的最终目标~
今天,咱们学习一下List容器,首先,给大家介绍一句忒牛逼的话。
如果一个程序只包含固定数量的且其生命周期都是已知的对象,那么这是一个非常简单的程序。
所以,大多数情况下,我们的对象都是不确定的,先为了解决数量上的不确定问题,Java祭出了它的第一大杀器ArrayList
,“可以自动扩充自身尺寸的数组”。
方法 | 作用 |
---|---|
add() | 插入对象 |
get() | 访问对象 |
size() | 查看对象个数 |
两种情况:
第一种(仅使用ArrayList方法):
ArrayList apples = new ArrayList();
apples.add(new Apple());//添加一个苹果
apples.add(new Bananas());//添加一个香蕉
事实上,这个是不会报错的!
但是,明明就是有区别的,苹果和香蕉肯定不一样呀,各自为两个类,类的属性方法都会有区别的。原因就在于ArrayList保存的是Object对象,Apple和Banana都没有显式地声明继承自哪个类,那么它们就会自动继承自Object。
第二种(ArrayList加上泛型)
ArrayList<Apple> apples = new ArrayList<Apple>();
apples.add(new Apple());//添加一个苹果
apples.add(new Bananas());//添加一个香蕉
这个时候,你再运行试试,编译器都过不去。所以嘛,用了泛型错误类型就不会在放到容器当中啦。<>内是参数的类型哈!
另外,f泛型支持向上转型
class Fruits{}
class Apple extends Fruits{}
class Banana extends Fruits{}
ArrayList<Fruits> fruits = new ArrayList<Fruits>();
fruits.add(new Apple());//添加一个苹果
fruits.add(new Bananas());//添加一个香蕉
这个是完全ok的。
练习时间:
问题:
创建一个新类Gerbil(沙鼠),包含int gerbilNumber,在构造器中初始化它。添加一个新方法hop(),用以打印沙鼠的号码以及它正在跳跃的信息。创建一个ArrayList,并向其中添加一串Gerbil对象。使用get()遍历List,并且对每个Gerbil调用hop()。
import java.util.ArrayList;
/** * * @author zhaiaxin * @time: 2017/3/29 16:11. */
class Gerbil {
private static long counter;
private final long gerbilNumber = counter++;
protected String hop() {
return gerbilNumber + " is jumping!";
}
}
public class TestGerbil{
public static void main(String[] args) {
ArrayList<Gerbil> gerbil = new ArrayList<Gerbil>();
for (int i = 0; i < 3; i++){
gerbil.add(new Gerbil());
}
for (int i = 0; i < 3; i++){
System.out.println(gerbil.get(i).hop());
}
}
}
/*Output: 0 is jumping! 1 is jumping! 2 is jumping! */