20172328 2018-2019《Java软件结构与数据结构》第四周学习总结

概述 Generalization

本周学习了第六章·列表,主要让我们认识列表以及分析各种列表实现。

教材学习内容总结 A summary of textbook

  • 6.1列表集合

  • 列表集合是一种概念性表示法,其思想是使事物以线性列表的方式进行组织。列表也可以用链表或者数组实现,列表集合没有内在的容量大小,它可以随着需要而增大。

  • 列表集合有三种类型:

    • 有序列表(ordered list):其元素按照元素的某种内在特性进行排序。
    • 无序列表(unordered list):其元素间不具有内在顺序,元素按照它们在列表中的位置进行排序。
    • 索引列表(indexed list):其元素可以用数字索引来引用。
  • 6.2Java集合API中的列表

  • 在JavaAPI中的ArrayList类和LinkedList类是由不同的底层结构实现的列表。

  • ArrayList类和LinkedList类都实现了java.util.List接口。List接口中的一些方法如图所示:

  • 6.3使用无序列表:学习计划

  • Course类代表学生可能选的一门课程,ProgramOfStudy类代表一个学习项目,一个学生计划学习的一系列课程,POSTester类示运用列表来管理一些对象。

  • ProgramOfStudy类和Course类实现了Serializable接口,为了是某个对象能使用串行化进行存储,其类必须实现Serializable。在Serializable接口中没有任何方法,它只是表明,该对象可以转化为串行化表示形式。(在教材问题中再深入讨论)

  • 6.4索引列表使用示例:Josephus问题

  • Josephus问题着眼于,当列表中的事件不是按顺序取出而是每隔i个元素提取,知道一个不剩时,如何找到这些事件的顺序。

  • 关键代码实现:

  • 6.5列表ADT

  • 有序列表的接口和无序列表的接口可以使用继承ListADT接口中的通用方法并各自保留自己的特殊操作。

  • 6.6使用数组实现列表

  • 基于数组的列表实现能把列表的一端固定在索引0处,并可以按需要平移元素。

教材学习中的问题和解决过程 Problem and countermeasure

  • 1.在书本第97页讲到了

ProgramOfStudy类和Course类都实现了Serializable接口为的是某个对象能使用串行化进行存储,该类必须实现Serializable接口。Serializable接口中没有任何方法,只是表明该对象可以转换为串行化表示形式。

串行化表示形式不太懂。

  • 问题1的解答:对象的寿命通常随着生成该对象的程序的终止而终止。有时候,可能需要将对象的状态保存下来,在需要时再将对象恢复。

  • 我们把对象的这种能记录自己的状态以便将来再生的能力。叫作对象的持续性(persistence)。对象通过写出描述自己状态的数值来记录自己,这个过程叫对象的串行化(Serialization)。

  • 串行化的主要任务是写出对象实例变量的数值。如果变量是另一对象的引用,则引用的对象也要串行化。这个过程是递归的,串行化可能要涉及一个复杂树结构的单行化,包括原有对象、对象的对象、对象的对象的对象等等。对象所有权的层次结构称为图表(graph)。

  • 推荐资料:Java对象的串行化

  • 2.在看用数组实现列表和做pp6.8的时候一直在想想想,modCount变量究竟是什么?为什么在列表中删除元素modCount也要增加?

  • 问题2的解答:modCount变量是一个整数变量,一旦集合被修改(无论是增加、删除、插入),modCount就会增加。

  • 3.在学习ProgramOfStudy类的代码时,对替代方法replace中的一行代码,该代码为if(targetIndex!=-1)不理解,虽然隐约猜到了是当目标元素索引值不返回-1,即目标索引值存在的话就进行list.set(targetIndex,newCourse)代替操作,但还是不太理解数字-1的含义。

  • 问题3的解答:

  • public int indexOf(int ch): 返回指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。

  • public int indexOf(int ch, int fromIndex): 返回从 fromIndex 位置开始查找指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。

  • int indexOf(String str): 返回指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。

  • int indexOf(String str, int fromIndex): 返回从 fromIndex 位置开始查找指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。

  • 推荐博客:indexOf方法的使用

课后习题作答 Exercise

  • 1.在做pp6.8,pp6.9,pp6.10的时候ArrayList类中的rear初始值为0,但是在remove方法中却有rear--;,这样rear不就成负数了嘛。不明白为什么不把rear的初始值定为list.length-1
  • 习题1的解答:这个问题询问了王文彬同学,通过他的解答,我最终的理解是:ArrayList是一个基于数组实现的列表,在其中的方法只代表要进行的操作,在ArrayList中把rear初始化成0,但是当我们创建对象,调用方法函数的时候,对象列表的有效长度-1(即列表最后一个有效元素的索引值)才是rear此时的值。
  • 2.不理解代码中的instanceof究竟是什么?这位置肯定是运算符啊。
if (!(element instanceof Comparable))
{
throw new NonComparableElementException("LinkedList");
}
  • 习题2的解答:instanceof运算符用于识别正在处理的对象的类型,要求开发者明确地确认对象为某特定类型,即上述代码语句段意为“元素如果不是Comparable类型,则抛出一个NonComparableElementException("LinkedList")的异常”。

  • 3.在运行测试类LinkedListTest时,突然出现了contains方法报错,之前写的代码如下:



  • 习题3解决:经过改正后发现我的while循环做的是判断,没有让其遍历链表,而且我的返回值有点问题,改正后如下【贴图】

上周测试活动错题改正 Correction

  • 问题1:A polymorphic reference can refer to different types of objects over time.(多态引用可以在一段时间内引用不同类型的对象)

    A .true

    B .false
  • 问题1解答:选择A,多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。
  • 问题2:A reference variable can refer to any object created from any class related to it by inheritance.(引用变量可以引用任何与它相关的类通过继承而创建的对象)

    A .true

    B .false
  • 问题2解答:选择A。引用变量是可以做到的,之前没有弄清楚。
  • 问题3:Inheritance creates an is-a relationship between all parent and child classes.(继承创建了在所有父类与子类之间的is-a关系)

    A .true

    B .false
  • 问题3解答:选择A.上学期课本上有。
  • 问题4:Common features should be located as low in a class hierarchy as is reasonable, minimizing maintenance efforts.

    A .true

    B .false
  • 问题4解答:选择B,最小化维护工作应该是表述不当的,因为共同特性定义在更低层次的话能够更多的被复用。
  • 问题5:A linked list has no set capacity limitations other than the size of the computers memory(一个链表除了计算机内存的大小之外没有设置容量限制)

    A .true

    B .false
  • 问题5解答:选择A,这道题确实是自己不会做,瞎蒙的也蒙错了,链表原来可以这么随意的扩展啊。
  • 问题6:A data structure is the underlying programming construct used to implement a collection.(数据结构是用于实现集合的底层编程结构)

    A .true

    B .false
  • 问题6解决:选择A。程序 = 数据结构+算法;

    软件=程序+软件工程;所以说数据结构是用于实现集合的底层编程结构。

码云链接

代码量(截图)

结对及互评Group Estimate

-20172301的博客(点击进入)

-20172304的博客(点击进入)

点评模板:

  • 博客中值得学习的或问题:

    • 20172301:对于instanceOf理解的比较透彻,但是美中不足的是博客变简单了。我想应该是国庆让我们有点懈怠了吧。好在列表之前有过接触,继续加油!
    • 20172304:教材问题和代码调试中的问题和解决过程都比较简单,解答可以写的再详细一点呀!太久的假期让我们无心学习啊哈哈哈。

其他(感悟、思考等,可选)Else

最难解决的问题是没有问题。

The most difficult problem toward a man is that he has no problem.

学习进度条Learning List

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积)
目标 5000行 30篇 400小时
第一周 0/0 1/1 8/8
第二周 621/621 1/2 12/20
第三周 678/1299 1/3 10/30
第四周 2734/4033 1/4 20/50

参考资料Reference

20172328 2018-2019《Java软件结构与数据结构》第四周学习总结的更多相关文章

  1. 20172328 2018-2019《Java软件结构与数据结构》第一周学习总结

    20172328 2018-2019<Java软件结构与数据结构>第一周学习总结 概述 Generalization 本周学习了软件质量.数据结构以及算法分析的具体内容,主要依托于所用教材 ...

  2. 20172328 2018-2019《Java软件结构与数据结构》第三周学习总结

    20172328 2018-2019<Java软件结构与数据结构>第三周学习总结 概述 Generalization 本周学习了第五章:队列.主要内容包含队列的处理过程.如何用对例如求解问 ...

  3. 20172328 2018-2019《Java软件结构与数据结构》第五周学习总结

    20172328 2018-2019<Java软件结构与数据结构>第五周学习总结 概述 Generalization 本周学习了第九章:排序与查找,主要包括线性查找和二分查找算法和几种排序 ...

  4. 20172328 2018-2019《Java软件结构与数据结构》第六周学习总结

    20172328 2018-2019<Java软件结构与数据结构>第六周学习总结 概述 Generalization 本周学习了第十章:非线性集合与数据结构--树.主要讨论了树的使用和实现 ...

  5. 20172328 2018-2019《Java软件结构与数据结构》第七周学习总结

    20172328 2018-2019<Java软件结构与数据结构>第七周学习总结 概述 Generalization 本周学习了第11章:二叉查找树.在本章中,主要探讨了二叉查找树的概念和 ...

  6. 20172328 2018-2019《Java软件结构与数据结构》第八周学习总结

    20172328 2018-2019<Java软件结构与数据结构>第八周学习总结 概述 Generalization 本周学习了二叉树的另一种有序扩展?是什么呢?你猜对了!ヾ(◍°∇°◍) ...

  7. 20172328 2018-2019《Java软件结构与数据结构》第九周学习总结

    20172328 2018-2019<Java软件结构与数据结构>第九周学习总结 概述 Generalization 本周学习了无向图.有向图.带权图.常用的图算法.图的实现策略. 教材学 ...

  8. 20172328 2018—2019《Java软件结构与数据结构》第二周学习总结

    20172328 2018-2019<Java软件结构与数据结构>第二周学习总结 概述 Generalization 本周学习了第三章集合概述--栈和第四章链式结构--栈.主要讨论了集合以 ...

  9. 20172302 《Java软件结构与数据结构》实验三:查找与排序实验报告

    课程:<Java软件结构与数据结构> 班级: 1723 姓名: 侯泽洋 学号:20172302 实验教师:王志强老师 实验日期:2018年11月19日 必修/选修: 必修 实验内容 (1) ...

随机推荐

  1. git 忽略部分文件类型的同步

    场景 利用 pycharm 进行代码操作的时候会自动创建 .idea/ 文件夹 特么我每次随便做点操作.这里面的东西也会随着自动改一些 一开始开始无视 如果是多人协同开发会导致代码合并相关的问题 因此 ...

  2. Magento 2 安装数据表

    Magento 2 安装数据表 第1步:安装脚本 首先,我们将为CRUD模型创建数据库表.为此,我们需要插入安装文件 app/code/Mageplaza/HelloWorld/Setup/Insta ...

  3. Loj #528. 「LibreOJ β Round #4」求和 (莫比乌斯反演)

    题目链接:https://loj.ac/problem/528 题目:给定两个正整数N,M,你需要计算ΣΣu(gcd(i,j))^2 mod 998244353 ,其中i属于[1,N],j属于[1,M ...

  4. Zabbix通过JMX方式监控java中间件

    Zabbix2.0添加了支持用于监控JMX应用程序的服务进程,称为“Zabbix-Java-gateway”:它是用java写的一个程序. 工作原理: zabbix_server想知道一台主机上的特定 ...

  5. 项目管理——WBS工作分解法

    首先我们要了解什么是WBS工作分解法 工作分解结构(Work Breakdown Structure,简称WBS)跟因数分解是一个原理,就是把一个项目,按一定的原则分解,项目分解成任务,任务再分解成一 ...

  6. 状态压缩动态规划 状压DP

    总述 状态压缩动态规划,就是我们俗称的状压DP,是利用计算机二进制的性质来描述状态的一种DP方式 很多棋盘问题都运用到了状压,同时,状压也很经常和BFS及DP连用,例题里会给出介绍 有了状态,DP就比 ...

  7. Pandas系列(三)-缺失值处理

    内容目录 1. 什么是缺失值 2. 丢弃缺失值 3. 填充缺失值 4. 替换缺失值 5. 使用其他对象填充 数据准备 import pandas as pd import numpy as np in ...

  8. JN_0003:JS定义变量的3种方式

    js中三种定义变量的方式const, var, let的区别. 1,const定义的变量不可以修改,而且必须初始化. 2,var定义的变量可以修改,如果不初始化会输出undefined,不会报错. 3 ...

  9. [物理学与PDEs]第1章第8节 静电场和静磁场 8.3 静磁场

    1. 静磁场: 由稳定电流形成的磁场. 2. 此时, Maxwell 方程组为 $$\beex \bea \Div{\bf D}&=\rho_f,\\ \rot {\bf E}&={\ ...

  10. Java线程安全队列BlockingQueue

    线程安全队列BlockingQueue 用法跟普通队列没有区别,只是加入了多线程支持. 这里主要说说add和put,以及poll和take的区别: add和put都是用来忘队列里面塞东西的,而poll ...