20172328 2018-2019《Java软件结构与数据结构》第四周学习总结
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。
课后习题作答 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
- [Java软件结构与数据结构](第四版)
- Java对象的串行化
- JavaScript instanceof 运算符深入剖析
- 理解多态
20172328 2018-2019《Java软件结构与数据结构》第四周学习总结的更多相关文章
- 20172328 2018-2019《Java软件结构与数据结构》第一周学习总结
20172328 2018-2019<Java软件结构与数据结构>第一周学习总结 概述 Generalization 本周学习了软件质量.数据结构以及算法分析的具体内容,主要依托于所用教材 ...
- 20172328 2018-2019《Java软件结构与数据结构》第三周学习总结
20172328 2018-2019<Java软件结构与数据结构>第三周学习总结 概述 Generalization 本周学习了第五章:队列.主要内容包含队列的处理过程.如何用对例如求解问 ...
- 20172328 2018-2019《Java软件结构与数据结构》第五周学习总结
20172328 2018-2019<Java软件结构与数据结构>第五周学习总结 概述 Generalization 本周学习了第九章:排序与查找,主要包括线性查找和二分查找算法和几种排序 ...
- 20172328 2018-2019《Java软件结构与数据结构》第六周学习总结
20172328 2018-2019<Java软件结构与数据结构>第六周学习总结 概述 Generalization 本周学习了第十章:非线性集合与数据结构--树.主要讨论了树的使用和实现 ...
- 20172328 2018-2019《Java软件结构与数据结构》第七周学习总结
20172328 2018-2019<Java软件结构与数据结构>第七周学习总结 概述 Generalization 本周学习了第11章:二叉查找树.在本章中,主要探讨了二叉查找树的概念和 ...
- 20172328 2018-2019《Java软件结构与数据结构》第八周学习总结
20172328 2018-2019<Java软件结构与数据结构>第八周学习总结 概述 Generalization 本周学习了二叉树的另一种有序扩展?是什么呢?你猜对了!ヾ(◍°∇°◍) ...
- 20172328 2018-2019《Java软件结构与数据结构》第九周学习总结
20172328 2018-2019<Java软件结构与数据结构>第九周学习总结 概述 Generalization 本周学习了无向图.有向图.带权图.常用的图算法.图的实现策略. 教材学 ...
- 20172328 2018—2019《Java软件结构与数据结构》第二周学习总结
20172328 2018-2019<Java软件结构与数据结构>第二周学习总结 概述 Generalization 本周学习了第三章集合概述--栈和第四章链式结构--栈.主要讨论了集合以 ...
- 20172302 《Java软件结构与数据结构》实验三:查找与排序实验报告
课程:<Java软件结构与数据结构> 班级: 1723 姓名: 侯泽洋 学号:20172302 实验教师:王志强老师 实验日期:2018年11月19日 必修/选修: 必修 实验内容 (1) ...
随机推荐
- [powershell]解决Win7SP1 powershell底色变成黑色
删除补丁KB3191566 重新安装: https://docs.microsoft.com/en-us/powershell/scripting/install/installing-windows ...
- [bilibili]弹幕屏蔽列表
<filters> <item enabled="true">t=定单身</item> <item enabled="true& ...
- Spring Cloud Data Flow 中的 ETL
Spring Cloud Data Flow 中的 ETL 影宸风洛 程序猿DD 今天 来源:SpringForAll社区 1 概述 Spring Cloud Data Flow是一个用于构建实时数据 ...
- Spring mvc 整合PageHelper
Integer page=queryBean.getPage(); Integer pageSize=queryBean.getPageSize(); response.setContentType( ...
- python+turtle 笔记
用Python+turtle绘制佩琪: from turtle import * def nose(x,y):#鼻子 penup()#提起笔 goto(x,y)#定位 pendown()#落笔,开始画 ...
- GDB disassemble
前面几篇谈GDB调试程序的帖子,都对反汇编语焉不详.这里详细讨论一下disassemble/disass命令 反汇编一个函数disass func_name 反汇编一段内存地址, 第1个参数是起始地址 ...
- oldboy s21day10
#!/usr/bin/env python # -*- coding:utf-8 -*- # 1.写函数,函数可以支持接收任意数字(位置传参)并将所有数据相加并返回. ''' def func(* ...
- 使用VS的生成事件命令行指令将生成的exe,dll文件复制到指定文件夹中
VS预生成事件命令行 和 生成后事件命令行 宏说明 $(ConfigurationName) 当前项目配置的名称(例如,“Debug|Any CPU”). $(OutDir) ...
- python学习03
字符串的基本使用 1.字符编码集 ASCII编码:外国人常用的大小写英文字母.数字和一些符号,一共127个字符,用1个字节(byte)可以涵盖完,也就是8个位,它将序列中的每个字节理解为一个字符. U ...
- java8 list统计(求和、最大、最小、平均)
list.stream().mapToDouble(User::getHeight).sum()//和 list.stream().mapToDouble(User::getHeight).max() ...