20172316 2017-2018-2《程序设计与数据结构》第四周学习总结
教材学习内容总结
第六章 列表
列表和之前的栈、队列有相似之处,都是一种集合,不同之处在于:列表可以在中间添加和删除元素。
其方法主要有
方法 | 描述 |
---|---|
add(E element) | 列表末端添加 |
add(int index,E element) | 索引处添加 |
get(int index) | 返回索引处元素 |
remove(E o) | 删除列表中第一个o |
remove(int index) | 删除索引处元素 |
set(int index,E element) | 替代索引处元素 |
size() | 返回元素数量 |
这些方法实现起来和之前的线性结构并无二致,之前也在队列中使用过中间插入的方法,处理起来不难。
无序和有序:这是本章和之前最不一样的地方,列表分为三种类型:有序、无序、索引。有序列表add()
时会根据所添加元素的关键值自动排序;无序列表则可以根据需要添加至所制定的位置(前addToFront()
、后addToRear()
、中addAfter()
)。
利用数组、链表来实现有序和无序列表:理解了上面的概念后,无需列表实现方法和栈、队列的实现基本相同。值得注意的是有序列表需要Comparable接口来帮助实现,参考了上学期第八周的作业和知识进行复习。
教材学习中的问题和解决过程
-
有序与无序,当时光从字面上理解,误以为有序指具有线性的结构而无序反之,结果并不是这样。有序和无序指的是列表元素的内在关联,看书后得到正确理解(上面↑)
-
什么是Serializable接口?(串行化?序列化?)
引用:
什么是Serializable接口?
一个对象序列化的接口,一个类只有实现了Serializable接口,它的对象才能被序列化
什么是序列化?
将对象的状态信息转换为可以存储或传输的形式的过程,在序列化期间,对象将其当前状态写入到临时存储区或持久性存储区,之后,便可以通过从存储区中读取或反序列化对象的状态信息,来重新创建该对象
什么情况下需要序列化?
当我们需要把对象的状态信息通过网络进行传输,或者需要将对象的状态信息持久化,以便将来使用时都需要把对象进行序列化
代码调试中的问题和解决过程
基本没有问题,都是可以立马解决的小细节(索引差一位、链表一个指针丢失的小问题)。
代码托管
(statistics.sh脚本的运行结果截图)
上周考试错题总结
- 1.Because queue operations modify both ends of the collection, fixing one end at index 0 eliminates the requirement that elements be shifted.
- 正确答案:False
- 原因:书中说:由于队列操作会修改集合的两端,因此将一端固定在索引0处。并未说消除了元素位移的需求。
- 2.Treating arrays as circular eliminates the need to shift elements in an array queue implementation.
- 正确答案:True
- 原因:环形数组消除了元素位移的需求,是对的,估计我是选错了。
- 3.A polymorphic reference can refer to different types of objects over time.
- 正确答案:True
- 原因:这不就是多态的特点吗?
- 4.A linked implementation of a stack adds and removes elements from the _______ of the linked list.
- 正确答案:A.Front
- 原因:未认真看题,以为应选
top
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/1 | 6/6 | |
第二周 | 771/771 | 1/2 | 16/22 | |
第三周 | 562/1233 | 1/3 | 15/37 | |
第四周 | 1503/2736 | 2/5 | 15/52 |
结对互评
参考资料
- 《Java程序设计教程(第八版)》电子工业出版社
- 《使用码云和博客园学习简易教程》
- 《使用开源中国(码云)托管代码》
- 数据结构(一) 单链表的实现-JAVA