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. VirtualBox下安装linux虚拟机

    下载VirtualBox 下载地址:https://www.virtualbox.org/wiki/Downloads 安装VirtualBox 安装虚拟机 如果选择不到64位系统, 开机按 F1 进 ...

  2. request param 获取

    通过request对象获取客户端请求信息 getRequestURL方法返回客户端发出请求时的完整URL. getRequestURI方法返回请求行中的资源名部分. getQueryString 方法 ...

  3. Stanford Local 2016 E "Election of Evil"(搜索(正解)或并查集(划掉))

    传送门 题意: 给出集合U,V,集合U有n个元素,集合V有m个元素: 有 m 个操作,mi : s1 s2 有一条s1指向s2的边(s1,s2可能属于第三个集合,暂且称之为K集合): 指向边具有传递性 ...

  4. FreeNAS系统总结

    FreeNAS简介 FreeNAS是一套免费的NAS服务器,它能将一部普通PC变成网络存储服务器.该软件基于FreeBSD,Samba 及PHP,支持CIFS (samba), FTP, NFS pr ...

  5. Eclipse 运行导入的 Java 项目时,Error:A JNI error has occurred

    出现场景 导入 Java 项目,运行时,出现:Error:A JNI error has occurred.... 解决方式 该项目的 Build Path , 在Libraries 中删除后重新添加 ...

  6. js的几大重点

    闭包,:作用域(函数创建),上下文环境(函数执行,会销毁) 匿名函数,:没有函数名的函数,function(){} 自执行函数,:立即调用的匿名函数,(function(){})() 原型链,:继承的 ...

  7. 网页三剑客之CSS

    1.CSS概述 CSS中文简称层叠样式表(英文全称:Cascading Style Sheets),用来控制页面的表现,即使页面更好看的语言. 2.CSS基本语法和页面引用 2.1 css的定义方法 ...

  8. C++回顾day02---<运算符重载>

    一:运算符重载的限制 (一)可以重载的运算符: + - * / % ^ & | ~ ! = < > += -= *= /= %= ^= &= |= << > ...

  9. deepin 下安装goland中文字体显示全是方块

    下载中文字体 apt-get install ttf-arphic-uming xfonts-intl-chinese 替换goland的汉化包,两个jar包.https://blog.csdn.ne ...

  10. django发送邮件send_mail&send_mass_mail

    一.配置 在setting.py中进行相关配置: EMAIL_HOST = 'smtp.sina.cn' #SMTP地址 EMAIL_PORT = 25 #SMTP端口 EMAIL_HOST_USER ...