20172306 2018-2019 《程序设计与数据结构》第四周总结
Posted lc1021
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20172306 2018-2019 《程序设计与数据结构》第四周总结相关的知识,希望对你有一定的参考价值。
20172306 2018-2019-2 《Java程序设计》第四周学习总结
教材学习内容总结
- 列表集合
- 列表集合是一种概念性表示法,其思想是使事物以线性列表的方式进行组织,没有内在的容量大小,它可以随着需要而增大。
- 列表集合的三种类型:有序列表:某种内在特性进行排序;无序列表:不具有内在顺序,按其在列表中的位置进行排序;索引列表:可以用数字索引来引用
- 无序列表中的元素按使用者所选择的任意方式排序
- 索引列表和数组的根本区别在于:索引列表的索引值总是连续的,如果删除了一个元素,其他元素的位置就会像“坍塌”了一样以消除产生的间隙,当插入一个元素时,其他元素的索引将进行位移以腾出位置。
- 使用无序列表
- 在其中学习到了一个名为串行化的过程,以二进制流的形式读取和写入对象。
public class Course implements Serializable
串行化,Serializable接口没有任何方法,主要为了表明该对象可以转换为串行化的形式
- 在其中学习到了一个名为串行化的过程,以二进制流的形式读取和写入对象。
- 列表ADT
- 主要有removeFirst removeLast remove first (查看前端元素) last (查看末端元素) contains (确定列表是否含有某个元素) isEmpty size 等方法 ,对于添加,无序列表还有addToFront addToRear addAfter(把元素添加到列表中某个已有元素的后面)
- 使用数组实现列表
- 因为列表可以从两端添加或删除元素,因此可以使用环形数组的方法。
- 列表前端固定在索引0处,整数变量rear表示了列表的元素数目,以及把元素添加到列表末端时的下一个可用位置。
- remove操作的复杂度为O(n);contains操作的复杂度为O(n) ;add操作的复杂度为O(n);addAfter操作的复杂度为O(n)。
- 只有Comparable对象才能存储在有序列表中,无序列表和索引列表不要求它们存储的元素是Comparable的。
- addToFront操作必须首先移动列表中的当前元素,以便为新元素腾出索引0的位置
- 使用链表实现列表
remove操作的复杂度为O(n)
教材学习中的问题和解决过程
- 问题1:在列表的三个类型中,对于索引列表还是不怎么懂,而且后面在说和数组的最大区别方面,我也没反应过来,我觉得都差不多啊
- 问题1解决方案:就是索引列表是可以用数字索引来引用,至于书中说的数组与索引列表的区别,就是,索引列表没有容量的限制,当中间删除一个值时,其后的会自动调到前面去,而数组不是,数组是有一定容量的,当中间删除时,是要手动将空位补上的。
- 问题2:有一个方法是remove(E Object)是说删除指定对象的第一个出现,我对于这个不是很懂。
- 问题2解决方案:后来在看了一些其他人的博客,明白,有一个remove(int index)是指删除指定索引处的元素,这个的意思是,在遍历列表时,对于所在的列表中和Object对象一样的第一个出现对象进行删除。
- 问题3:为什么只有Comparable对象才能存储在有序列表中?
问题3解决方案:我在网上找了,没有找到很确切的说法和结论。不过我再看书和查看网上的一些其他说法时,我觉得是因为,有序列表是通过某种内在特性进行排序,而这种排序方法需要Comparable进行比较,否则无法成为有序,而另两个却和有序列表不同,因此只有Comparable对象才能存储在有序列表中
代码调试中的问题和解决过程
问题1:在做使用数组完成列表时,在测试时出现了这种问题
问题1解决方案:后来通过单步调试发现了问题出在了last和size的方法上。后来我就单步调试看看错在了哪,发现在last中最开始是
T result = list[rear]
但是书中写到了rear表示的是列表中的元素数目,以及把元素添加到列表末端时的下一个可用位置,通过单步调试可知list[rear]为null,还有size(),最开始我用的是别的变量,但是发现它在其他操作中还需要对该变量进行调整,所以后来想到了rear这个量。- 问题2:对于后来的PP6.17,我最开始我不知道怎么开始,觉得好复杂啊
问题2解决方案:后来我看了范雯琪同学的码云,然后看了书中,有句话说,Comparable接口定义了compareTo方法,当执行对象为小于、等于、大于传入参数时,该方法将分别返回一个负整数、0或者一个正整数。我觉得它就是根据这个过程来写的,通过正整数和负整数进行判断排序。
代码托管
上周考试错题总结
结对及互评
点评模板:
- 博客中值得学习的或问题:
- 内容写的很仔细
- 在问题方面分析的也很好
点评过的同学博客和代码
- 本周结对学习情况
- 20172325
- 结对学习内容
- 一起对之前的实验进行了总结
- 一起看了第六章的书
- 一起编程了第六章的内容
其他(感悟、思考等,可选)
第六章的内容其实和之前的都很有联系,其实越来越说明,学好数组和链表是多么的重要,我觉得之前我学的不咋好,但是在不断的用数组和链表进行编程时,自己对于这两个理解比以前深多了而且懂得也多了。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/1 | 6/6 | |
第二周 | 985/985 | 1/1 | 18/24 | |
第三周 | 663/1648 | 1/1 | 16/40 | |
第四周 | 1742 /3390 | 2/2 | 44/84 |
参考资料
以上是关于20172306 2018-2019 《程序设计与数据结构》第四周总结的主要内容,如果未能解决你的问题,请参考以下文章
20172306 2018-2019-2 《Java程序设计与数据结构》第八周学习总结
20172306 2018-2019-2 《Java程序设计与数据结构》第七周学习总结