List容器类(大家先别看,还没写完)

时间:2021-06-26 19:50:46

先立一个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! */