基础数据类型:都和对象的集合有关,操作:添加,删除或访问
    1.3.1 API
    泛型
    自动装箱和自动拆箱
    可迭代的集合类型
    1、背包 不支持从里面删除元素的集合类型
    2、队列(FIFO)
    3、栈(LIFO)后进先出
    栈的应用:算数表达式求值P128
    Dijkstra的双栈算数表达式求值算法
    操作数栈+运算符栈
    大话数据结构中的逆波兰表示法—>后缀表达式,与此类似。使用单栈
    1.3.2 集合类数据类型的实现
    1.3.2.1 定容栈
    使用泛型数组,在Java中是不允许的,这样是合理的:
    Item[] a = (Item[]) new Object[cap];
    对象游离:Java垃圾收集策略是回收所有无法被访问的对象的内存。保存着一个不需要的对象的引用就称为游离。要避免对象游离只要将引用设为null即可。
    迭代 p86
    实现了Iterable接口,就要实现iterator() 方法,该方法必须返回一个Iterator对象
    Iterator类必须有两个方法 hasNext()、next()
    1.3.3 链表
    链表:泛型元素+指向下一个链表的引用
    对链表的各种操作:表头插入节点、表头删除节点、表尾插入节点
    —>栈的实现
    —>队列的实现
    —>背包的实现
    双向链表:实现任意插入和删除的标准解决方案,每个节点都有两个链接,指向向前和向后两个方向
    链表达到了最优化设计目标

    • 他可以处理任意类型的数据
    • 所需空间总是和集合的大小成正比
    • 所需时间总是和集合的大小无关,常数时间

    1.3.4 综述
    a static nested class 静态内部类
    a non-static nested class 非静态内部类
    基础数据结构:
    1数组 易访问,调整顺序慢,需要预定义空间

    • 优点 通过索引任意访问元素
    • 缺点 初始化时需要提前知道元素数量

    2链表 易修改,调整顺序快,不需要预定义空间,访问慢

    • 使用空间大小与元素个数成正比
    • 需要通过引用访问元素。

    答疑:
    1、泛型的优势:在编译时就能发现类型不匹配的错误
    2、Java不允许泛型数组
    3、Private的嵌套类(内部类),只有包含她的外部类,才能直接访问该内部类的实例变量
    4、foreach,是for语句和Iterator机制的语法糖。
    使用条件:数组或者是实现了Iterable的集合
    5、宽接口,比如java.util.stack ,这个还多了很多不属于栈的方法,也可以被用作队列。本书坚持窄接口