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或者一个正整数。我觉得它就是根据这个过程来写的,通过正整数和负整数进行判断排序。

代码托管

上周考试错题总结

  • 扫描二维码关注公众号,回复: 3468229 查看本文章

结对及互评

点评模板:

  • 博客中值得学习的或问题:
    • 内容写的很仔细
    • 在问题方面分析的也很好

点评过的同学博客和代码

  • 本周结对学习情况
    • 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

参考资料

猜你喜欢

转载自www.cnblogs.com/lc1021/p/9750228.html