知识点
3.1 抽象数据类型
抽象数据类型是带有一组操作的一些对象的集合
3.2 表ADT
略
3.3 Java Collections API 中的表
增强for循环本质上便是迭代器
迭代器的remove方法只能在next方法后使用,其删除next最新返回的项,并只能使用一次
如果对正在迭代的集合进行结构上改变的方法,例如添加、删除、清空等则会在下步使用迭代器时报异常,因为改变结构可能造成迭代器本身想给出的项目被提前删除或者将新的项目添加到了迭代器的游标前面。若是采用迭代器自带的remove方法则没有问题,因为迭代器会进行结构调整处理。
迭代器的add方法在当前游标位置添加元素,将原先所指元素后移,并且将游标后移,使其仍然指向原先元素。
迭代器的set方法修改最新出现的元素,并不改变游标位置
next方法给出当前游标元素并后移,previous方法将游标前移并给出元素
3.4 ArrayList 类的实现
内部类的好处是其属于外部类的一部分,可将其设为私有。另外可以使用外部类的私有属性。
静态内部类使用外部类属性应该持有外部类的对象,否则由于静态内部类为所有外部类共享,其无法分清引用了哪一个外部类
非静态内部类则不需要持有外部类对象才可使用其属性,因为编译器默认给内部类传递了外部类实例对象。
内部类和外部类应该看作同一个类,可以互相访问对方的私有属性。
3.5 LinkedList 类的实现链表的迭代器游标非数字索引,而是节点
3.6 栈 ADT
略
3.7 队列 ADT
略
对知识点的理解
1.栈后进先出,在考虑应用栈数据结构时,分析问题是否具备后进先出特性最为关键。当程序需要处理数据时,会先处理最后的数据。
2.在设计栈数据结构时,主要关注变化端,即最后端。因为在最后端要同时进行压入和弹出操作,实现设计高效的栈数据结构,要考虑到最后端既要便于压入操作同时便于弹出操作。同理地,在数据操作,数据查询时,同样试着思考能不能只靠考虑最后端数据的操作和变化,以提高算法性能,因为内部数据的变化要先依赖于端点数据的弹出。
3.单链表的插入和删除操作,可以不对节点进行操作,而转换思路,通过改变节点值已达到改变的目的,从而不用使用两个节点缓存进行插入和删除。
难点和疑点
1.第15练习题,不知道在讲什么鬼。