教材学习内容总结

  • 列表:是线性结构,可以用链表或数组来实现,列表集合没有内在的容量大小,他可以随着需要而增大。
  • 栈是在其栈顶进行添加删除操作,队列在其头删除,尾添加,而线性列表可以在列表的中间和末端添加和删除元素。
  • 列表有三种类型:有序列表、无序列表、索引列表

    分别可以表示为

  • 有序列表:基于列表中的某种特性,元素具有内在关联,这种关联定义了元素之间的顺序。
  • 无序列表:并不是真正的没有顺序,而是按照根元素本身无关的一种特殊顺序放置,列表的使用者会决定元素的顺序。
  • 索引列表:各元素之间也并不能决定在列表中的顺序,由使用者决定。每个元素能从一个数字索引得到引用索引值从0开始
  • 索引列表和数组的区别:索引列表的索引值总是连续的,如果删除了一个元素,其他元素的位置会像“坍塌”了一样以消除空隙。
  • Java集合API中的列表

  • 使用无序列表:学习计划00
  • 索引列表使用示例:Josephus问题
  • 列表ADT
    • 往列表中添加元素

      • 有序列表:add(列表中添加元素)

      • 无序列表:addToFront

  • ProgramOfStudy的UML图

  • 使用数组实现列表
    • 列表前端固定在索引0处,整数变量tear表示了列表中的元素数组,以及把元素添加到列表末端时的下一个可用位置。
    • 有序列表和无序列表的共有操作
      • remove操作:删除列表中的操作,找到元素需要进行n次比较操作,复杂度为O(n)。
      • contains操作:判断元素是否包含在列表中,复杂度同为O(n)
    • 有序列表的add操作:只有Comparable对象才能储存在有序列表中。
    • 无序列表的addAfter操作
  • 使用链表实现列表
    • remove操作:首先要确认列表非空,查找要删除的元素,然后有四种情况

      • 要删除列表中唯一元素
      • 要删除列表中首元素
      • 要删除列表中末尾元素
      • 要删除列表当中的位置

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

  • 问题一:列表的特征有哪些?如何定义
  • 集合是Java API所提供的一系列类,可以用于动态存放多个对象。集合与数组的不同在于,集合是大小可变的序列,而且元素类型可以不受限定,只要是引用类型。集合中不能放基本数据类型,但可以放基本数据类型的包装类。 集合类全部支持泛型,是一种数据安全的用法。java列表是集合的一种,并且列表中的元素是有序的,且允许重复。java列表又称为java list。

  • 问题二:书上在描述索引列表与数组的区别在于索引列表的索引值总是连续的,那数组的索引值不也是连续的吗?
  • 问题二解决:这句话的意思可能并不是说连续与否,因为数组中的元素也是连续存在的,应该是指它出现空位置的修复速度吧,就像书上后面描述如果删除一个元素,其他元素的位置会像“坍塌”了一样以消除产生的间隙。

  • 问题三:书上说列表集合没有内在容量大小,它可以随着需要而增大,但是当列表由数组来实现时,应该不能随意增大了吧
  • 问题三解决:数组的长度是存放线性表的存储空间的长度存储分配后这个量是一般是不变的。用数组实现列表时,的确需要进行扩容操作
    protected void expandCapacity() { list = Arrays.copyOf(list, list.length * 2); }
    在这里这句话的含义并不等同于使用链表实现列表时的情况。

代码调试中的问题和解决过程

  • 问题一:代码标红显示:'contains(T)' in '新第四周.six.LinkedList.LinkedOrderedList' clashes with 'contains(T)' in '新第四周.six.LinkedList.ListADT'; both methods have same erasure, yet neither overrides the other
  • 问题一解决:这个错误的意思是,两个方法在类型擦除后,具有相同的原生类型参数列表,但是也不能覆盖另一个方法。泛型类型在编译后,会做类型擦除,只剩下原生类型。如参数列表中的T类型会编译成Object,但是会有一个Signature。尽管两个方法具有相同的字节码,但是类型参数信息用 一个新的签名(signature)属性记录在类模式中。JVM 在装载类时记录这个签名信息,并在运行时通过反射使它可用。这就导致了这个方法既不能作为覆盖父类contains的方法,也不能作为contains方法的重载。

  • 问题二:代码中总有一个变量modCount,并不理解它存在的意义。
  • 问题二解决:通过查找资料,解释是:

    modCount字面意思就是修改次数,所有使用modCount属性的全是线程不安全的,对内容的修改都将增加这个值,那么在迭代器初始化过程中会将这个值赋给迭代器的 expectedModCount。在迭代过程中,判断 modCount 跟 expectedModCount是否相等,如果不相等就表示已经有其他线程修改了,在迭代器遍历的过程中,因为ArrayList被设计成非同步的,一旦发现这个对象的modcount和迭代器中存储的modcount不一样那就抛异常。

    看起来不太好理解,举个栗子:教务处网站统计学生成绩,假如进行成绩的修改,则modCount就相当于一本日志来记录每次对成绩的修改,万一实际成绩与教务处网站存出成绩有出入,则可通过日志查看问题出在哪里。

  • 问题三:instanceof是什么意思?

  • 问题三解决:java 中的instanceof是一个二元操作符(运算符)运算符,由于是字母组成,所以是Java的保留关键字,但是和>=,<=,==属同一类,它的作用是用来判断,instanceof 左边对象是否为instanceof右边类的实例,返回一个boolean类型值。 还可以用来判断子父类的所属关系。
    • 用法:

      boolean result = object instanceof class

    • 参数:

      Result:布尔类型。

      Object:必选项。任意对象表达式。

      Class:必选项。任意已定义的对象类。

    • 说明:
      如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false。

    这样看来图中的意思就是判断element是否是Comparable类型的。

代码托管

  • pp6.8

  • pp6.11

  • pp6.17

上周考试错题总结

  • 错题一

  • 错题一解析:删除操作会移动指针,但不会返回。
  • 错题二:

  • 错题二解析:多态引用可以在一段时间内引用不同类型的对象。这句话是正确的,多态本身就是指多种状态,我做题时着重点在一段时间上,其实并不是重点。
  • 错题三:

  • 错题三解析:常见的特性应该在类层次结构中处于高水平,这样才能最大化利用资源,使低水平的都可以引用。
  • 错题四:

  • 错题四解析:正确的应该是实现基于数组的堆栈最有效的方法是将堆栈底部保持在数组的位置0上。因为如果栈在数组中是倒序的,效率会高。

结对及互评

点评模板:

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

    • 20172305谭鑫的疑难问题解决的很好,内容全面,排版精美。
    • 20172323王禹涵的博客中课本内容总结有具体代码,但遇到的问题及解决过程的记录可以更加丰富一点。
  • 基于评分标准,我给谭鑫的博客打分:9分。得分情况如下:
    • 问题加分6分
    • 感悟不假大空加1分
    • 排版精美的加1分
      -正确使用Markdown语法加1分
      -模板中的要素齐全加1分
  • 基于评分标准,我给王禹涵的博客打分:6分。得分情况如下:
    • 排版精美的加1分
    • 问题加分2分
    • 感悟不假大空加1分
      -正确使用Markdown语法加1分
      -模板中的要素齐全加1分

其他

这周在做实验时遇到的问题很多,感觉没有系统化所学习的各类东西。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积)
目标 5000行 30篇 400小时
第一周 0/0 1/1 8/8
第二周 1163/1163 1/2 15/23
第三周 774/1937 1/3 12/50
第四周 3596/5569 2/5 12/62

参考:

  • java列表
  • 泛型类型擦除与重载和覆盖问题
  • ArrayList中modCount的作用

转载于:https://www.cnblogs.com/YiYiYi/p/9752021.html

20172314 2018-2019-1《程序设计与数据结构》第四周学习总结相关推荐

  1. 《JAVA程序设计》_第四周学习总结

    一.本周学习内容 1.子类与父类--5.1知识 在类的声明中用关键字extends来定义一个类的子类,格式如下: class 子类名 extends 父类名 { ... } 2.子类的继承性--5.2 ...

  2. 201671010119 2016-2017-2《Java程序设计》第十四周学习心得

    本周老师对第十一章事件处理进行了重点讲解 ,讲解之前老师先在PPT上放了几道题目,对我们自己学习十一章进行了一个随堂测验.通过这次随堂测验,我觉得我看书还是不够仔细,有些该注意的细节没有注意到.通过测 ...

  3. 201621123053《Java程序设计》第十四周学习笔记文章

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结与数据库相关内容. 2. 使用数据库技术改造你的系统 2.1 简述如何使用数据库技术改造你的系统.要建立什么表?截图你的表设计. 2 ...

  4. 20172303 2018-2019-1《程序设计与数据结构》课程总结

    20172303 2018-2019-1<程序设计与数据结构>课程总结 课程:<程序设计与数据结构> 班级: 1723班 姓名: 范雯琪 学号:20172303 教师:王志强 ...

  5. 20162329 张旭升 2017 - 2018 《程序设计与数据结构》第五周总结

    20162329 2017-2018-1 <程序设计与数据结构>第五周学习总结 教材学习内容总结 1.学习目标 了解集合的概念 了解并使用抽象数据类型 初步了解使用Java泛型 学习栈这种 ...

  6. 20172324 2018-2019-1《程序设计与数据结构》实验2报告

    20172324 2018-2019-1<程序设计与数据结构>实验2报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 曾程 学号:20172324 实验教师:王志强 ...

  7. 20172329 2017-2018-2 《程序设计与数据结构》实验五报告

    这是这学期最后一次实验了,也是学到了很多东西,希望自己可以可以善始善终,加油! 让我们开始这一篇博客吧! 20172329 2017-2018-2 <程序设计与数据结构>实验五报告 课程: ...

  8. 20172328《程序设计与数据结构》实验二:树

    20172328<程序设计与数据结构>实验二:树 课程:<软件结构与数据结构> 班级: 1723 姓名: 李馨雨 学号:20172328 实验教师:王志强老师 实验日期:201 ...

  9. 20172318 2017-2018-2 《程序设计与数据结构》实验3报告

    20172318 2017-2018-2 <程序设计与数据结构>实验3报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 陆大岳 学号:20172318 实验教师:王 ...

  10. 《程序设计与数据结构》实验四报告

    学号 2017-2018-2 <程序设计与数据结构>实验四报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 康皓越 学号:20172326 实验教师:王志强 实验日 ...

最新文章

  1. 大脑进化追不上社会文化:化石和脱氧核糖核酸证明人类大脑进化比社会慢
  2. 20145321 《Java程序设计》第7周学习总结
  3. 【狂神说】Redis笔记
  4. 58 MM配置-评估和科目设置-OBYC配置自动记账
  5. 运放输入偏置电流方向_连载 | 运放参数的详细解释和分析part2如何测量输入偏置电流Ib和输入失调电流Ios...
  6. Serengeti Accomodation
  7. 计算机英语会话实用电脑英语,计算机英语会话(MP3+中英字幕) 第41期:实用电脑英语...
  8. SitePoint播客#160:坐在树上的Adobe和HTML
  9. Zotero文献管理软件使用指南——入门篇
  10. xposed框架安全模式_Android 系统上的 Xposed 框架中都有哪些值得推荐的模块?
  11. 校园网 显示ldap服务器连接不上,客户端无法连接到LDAP服务器
  12. 您已购买此 App 内购买项目。此项目将免费恢复。This In-App purchase has already been bought.It will be restored for free.
  13. 为做了面向互联网部署(IFD)的Dynamics 365定制登录账号格式
  14. C#类库推荐 拼多多.Net SDK,开源免费!
  15. Web前端下载文件的几种常见方式
  16. 【顺丰一面】2020/4/5_顺丰第一次技术面试_20分钟
  17. 推荐一本网络科学入门书
  18. 如何在html网页添加动态特效,《让网页动起来----动态HTML》教学案例
  19. Unity—“合成大西瓜”小游戏笔记
  20. 聊聊 Kafka:协调者 GroupCoordinator 源码剖析之 FIND_COORDINATOR

热门文章

  1. 【算法】二分图的判定
  2. 每天一道LeetCode-----计算二叉树所有根节点到叶子节点的和
  3. 每天一道LeetCode-----寻找地增序列中第一个大于等于目标元素的位置
  4. C++学习笔记-----operator=函数处理自赋值
  5. Linux 的虚拟文件系统(强烈推荐)
  6. 标准库类型string的基本功能和使用
  7. 记录 之 numpy扩充某一维度,并重复填充
  8. C++11 unique_ptr用法
  9. MySQL为其他用户创建数据库_MYSQL添加新用户 MYSQL为用户创建数据库 MYSQL为新用户分配权限...
  10. 51单片机的轮胎气压监测系统_SHT11传感器的温度、湿度采集系统,51单片机,Proteus仿真,C代码等...