12 为什么要有容器,容器与数组的区别,为什么会有迭代器

00 为什么要有容器?

我知道有数组,但数组有一个弊端,它是固定的,不可变。这个经常会导致出现数组越界导常的错误。并且还需要事先知道这个数组的长度才可以定义。

但很多时候,我们并不知道未来将会发生什么,所以我们创造了容器,它是不固定的,可变的,可以根据元素的增加而增加,每次增加原数组的1.5倍。为什么是1.5倍呢,因为2倍太大了,1倍太小,所以为了保证效率,择中选1.5倍。

数组与容器的区别?
  • 数组能存基础数据类型,也可以存引用数据类型;容器只能存引用数据类型
  • 数组的长度是固定的,容器的长度可以根据元素的增加而增加

01 为什么会有迭代器?

数组有的功能,容器大部分都会有。数组存放数据可能是有序的,也可能是无序的。所以容器也具备同样的功能,容器英文:Collection,有序的表示为List,即链表结构,无序的表示为Set,即想在哪建立就在哪建立。

问题来了,有序的List,我们可以通过索引来遍历数组。但无序的Set怎么办?

先展示一下有序的List通过size()以及get()方法来遍历数组

public static void demo3() {
    List list = new ArrayList();
    list.add(new Student("aa",12));
    list.add(new Student("bb",13));
    list.add(new Student("cc",14));
    list.add(new Student("dd",15));

    for(int i = 0; i < list.size(); i++) {
        Student stu = (Student) list.get(i);
        System.out.println(stu.getName() + "," +stu.getAge());
    }
}

解决办法:分开建立两个方法不就可以了么。

比如:List就建立一个ListIterator类(如果不考虑命名规范,这个名字可以随便定义啦),Set就再建立一个SetIterator类,我们说Java是面向对象编程,这是一种抽象编程,换句话说,就是对具体类的依赖性最小。所以,为了解决这样的问题,我们就会将这些类抽象出来,建立Iterator类,这也就是为什么会有Iterator迭代器的原因了。

用一句话总结:Iterator类的访问方式就是把不同集合类的访问逻辑抽象出来,使得不用暴露集合内部的结构而达到循环遍历集合的效果。

为了达到抽象,我们将共同的方法给抽象出来,Iterator类就只有三个方法了,hasNext()、next()、remove()。不同的集合再由子类去重写这三种方法,而对于使用者来说,不用管是怎么实现的,直接调用就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值