20172325 2018-2019-2 《Java程序设计》第四周学习总结

教材学习内容总结

《Java软件结构与数据结构》第六章-列表

一、概述

  • 1、列表是什么?

列表集合是一种概念性表示法,其思想是使事物以线性列表的方式进行组织。就像栈和队列一样,列表也可以使用链表或数组来实现。

需要注意的一点是:列表集合没有内在的容量大小。

  • 2、列表集合的类型

(1)有序列表(order list),其元素按照元素的某种内在特性进行排序。

(2)无序列表(unordered list),其元素间不具有内在顺序,元素按照它们在列表中的位置进行排序。

(3)索引列表(indexed list),其元素可以用数字索引来引用。

  • 3、有序列表

(1)有序列表中的元素具有内在关联,这种关联定义了元素之间的顺序。

(2)只有Comparable对象才能储存在有序列表中。

(3)用数组实现有序列表:

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

删除操作:

@Override
public T remove(T element)
{
T result;
int index = find(element); if (index == NOT_FOUND)
throw new ElementNotFoundException("ArrayList"); result = list[index];
rear--; // shift the appropriate elements
for (int scan=index; scan < rear; scan++)
list[scan] = list[scan+1]; list[rear] = null;
modCount++; return result;
}

contains操作:

@Override
public boolean contains(T target)
{
return (find(target) != NOT_FOUND);
} public void expandCapacity(){
T[] larger = (T[]) new Object[list.length*2];
for (int scan = 0;scan<rear;scan++){
larger[scan]=list[0]; }
list=larger; }

add操作:

public void add(T element)
{
if (!(element instanceof Comparable))
throw new NonComparableElementException("OrderedList"); Comparable<T> comparableElement = (Comparable<T>)element; if (size() == list.length)
expandCapacity(); int scan = 0; // find the insertion location
while (scan < rear && comparableElement.compareTo(list[scan]) > 0)
scan++; // shift existing elements up one
for (int shift=rear; shift > scan; shift--)
list[shift] = list[shift-1]; // insert element
list[scan] = element;
rear++;
modCount++;
}
  • 4、无序列表

(1)无序列表中的元素按使用者所选择的任意方式排序。

(2)用数组实现:

addafter操作:

@Override
public void addAfter(T element, T target)
{
if (size() == list.length)
expandCapacity(); int scan = 0; // find the insertion point
while (scan < rear && !target.equals(list[scan]))
scan++; if (scan == rear)
throw new ElementNotFoundException("UnorderedList"); scan++; // shift elements up one
for (int shift=rear; shift > scan; shift--)
list[shift] = list[shift-1]; // insert element
list[scan] = element;
rear++;
modCount++;
}
  • 5、索引列表

(1)索引列表为它的元素维护一段连续的数字索引值。

(2)索引列表和数组的根本区别在于:索引列表的索引值总是连续的。如果删除一个元素,其他元素的位置会像“坍塌”了一样以消除产生的间隙,当插入一个元素时,其他元素的索引将进行位移以腾出位置。

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

  • 问题1:数组实现的ArrayList和使用链表实现的LinkedList在空间复杂度和时间复杂度上有什么区别?

  • 问题1解决方案:链表实现需要更多的空间。LinkedList类实际上是一个双向链表,因此其引用需要两倍的空间。ArrayList类在空间管理上比基于数组的实现方式更高效。这是因为,ArrayList集合是可变大小的,因此按所需动态分配空间。所以,无需一次申请大量的空间而造成浪费。列表是在需要时才增加空间。两者间最大的区别发生在访问列表中特定索引位置时。如果已知索引值,ArrayList实现能够在相同的时间内访问列表中的任意元素。

  • 问题2:教材提到ProgramOfStudy和Course类实现了Serializable接口,对于Serializable接口不太了解。

  • 问题2解决方案:是一个对象序列化的接口,一个类只有实现了Serializable接口,它的对象才能被序列化;

    Serializable主要用来支持两种主要的特性:

    1、Java的RMI(remote method invocation),RMI允许像在本机上一样操作远程机器上的对象,当发送消息给远程对象时,就需要用到序列化机制来发送参数和接受返回值

    2、Java的JavaBean,Bean的状态信息通常是在设计时配置的,Bean的状态信息必须被保存下来,以便当程序运行时能恢复这些状态信息,这也需要序Serializable机制

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

  • 问题1:做使用数组完成列表时,在测试时出现了这种问题,猜测是Last操作size操作有问题。

  • 问题1解决方案:后来通过单步调试发现了问题出在了last和size的方法上。后来我就单步调试看看错在了哪,发现在last中最开始是

    T result = list[rear]

    但是书中写到了rear表示的是列表中的元素数目,以及把元素添加到列表末端时的下一个可用位置,通过单步调试可知list[rear]为null,还有size(),最开始我用的是别的变量,但是发现它在其他操作中还需要对该变量进行调整,所以后来想到了rear这个量。



代码托管

由于IDEA除了问题,上学期的代码全部错误,导致不能运行,所以将上学期代码全部删除,码云中有备份,可以随时查看。

(statistics.sh脚本的运行结果截图)

上周考试错题总结

暂未改错,10月14日前改错完毕。

结对及互评

点评模板:

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

    • 问题和解决过程记录详细
    • 按时按量完成高质量的博客记录
  • 代码中值得学习的或问题:

    • 多尝试多摸索
    • 在遇到错误时首先想到查阅资料解决问题,而不是轻易放弃
    • 装换思路尝试新的方式会有意想不到的收获
  • 参考示例

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

由于国庆假期没有利用好时间精力,导致耽误了学习任务,很是对不起自己和老师的期望,希望通过改变和调整,能够利用好以后的时间精力,一定按时按量完成给自己规定的学习任务,不给自己的错误找借口才是前进的最大突破,继续加油。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 0/0 1/1 20/20
第二周 941/8481 1/2 18/20
第三周 653/9134 1/3 22/20
第四周 1728/4385 2/5 8/28

参考资料

20172325 2018-2019-2 《Java程序设计》第四周学习总结的更多相关文章

  1. Java程序设计第四周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 答:①String类是final类,不能定义String的子类. ② instanceof ...

  2. 201871010106-丁宣元 《面向对象程序设计(java)》第四周学习总结

    201871010106-丁宣元 <面向对象程序设计(java)>第四周学习总结 正文开头 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-da ...

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

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

  4. 杨其菊201771010134《面向对象程序设计(java)》第四周学习总结

    <面向对象程序设计(java)> 第四周学习总结 第一部分:理论知识 1.类与对象 a.类(class)是构造对象的模板或蓝图.由类构造对象的过程称为创建类的实例: java中类声明的格式 ...

  5. 对于“2017面向对象程序设计(JAVA)第四周学习总结”存在问题的反馈

    对于“2017面向对象程序设计(JAVA)第四周学习总结”存在问题的反馈 “这部分同学博文总结没有写,实验作业没有提交.”——1.关于博文作业.实验作业教学功能的正解:学习知识.暴露问题.衔接课上.2 ...

  6. 20155318 2016-2017-2 《Java程序设计》第九学习总结

    20155318 2016-2017-2 <Java程序设计>第九学习总结 教材学习内容总结 学习目标 了解JDBC架构 掌握JDBC架构 掌握反射与ClassLoader 了解自定义泛型 ...

  7. 《Java程序设计》第二学习总结

    <Java程序设计>第二学习总结 教材学习内容总结 类型 byte(字节) shot(短整型) int(整型) long(长整型) float(浮点型) double(双精度) char( ...

  8. 20145304 刘钦令 Java程序设计第二周学习总结

    20145304 <Java程序设计>第2周学习总结 教材学习内容总结 java可区分基本类型和类类型(即参考类型)两大类型系统. 基本类型主要可区分为整数.字节.浮点数.字符与布尔. 整 ...

  9. 20145304 刘钦令 Java程序设计第一周学习总结

    20145304<Java程序设计>第1周学习总结 教材学习内容总结 1995年5月23日,是公认的Java的诞生日,Java正式由Oak改名为Java. Java的三大平台是:Java ...

  10. 20145120黄玄曦 《java程序设计》 寒假学习总结

    1和2.我对未来规划不多,我认为好好学习积累知识能帮助我应对未来的挑战,这是我的学习动力之一,此外,了解新知识满足好奇心也是我的主要的学习动力. 3.我认为专业课学习比公务员考试重要,我认为专业知识是 ...

随机推荐

  1. 微信小程序--分享报错(thirdScriptError Cannot read property 'from' of undefined;at pages/index/index page onShareAppMessage function TypeError: Cannot read property 'from' of undefined)

    分享功能: onShareAppMessage: function (res) { if (res.from === 'button') { // 来自页面内转发按钮 console.log(res. ...

  2. 2017面向对象程序设计(JAVA)第3周学习指导及要求(2017.9.6-2017.9.12)

    学习目标 掌握类与对象的基础概念,理解类与对象的关系: 掌握对象与对象变量的关系: 掌握预定义类的基本使用方法,熟悉Math类.String类.math类.Scanner类.LocalDate类的常用 ...

  3. php urldecode 与rawdecode

    php urldecode 解码给出的已编码字符串中的任何 %##. 加号('+')被解码成一个空格字符 php rawurldecode 返回字符串,此字符串中百分号(%)后跟两位十六进制数的序列都 ...

  4. MVC002之获取当前用户失败(Context.User.Identity.Name)

    通过Context.User.Identity.Name想获取当前用户的域帐号信息(如:Greatwall\Snow) 可值等于"",什么原因呢. 该问题和MVC关系不大,主要是I ...

  5. MONGO的简单语法,新手实用

    window上启动方式:(简单略) mongod --dbpath E:\study_lib\mongodb\db --port=27000 show dababases; (创建配置文件的启动方式) ...

  6. django models实际操作中遇到的一些问题

    问题1.将主键id改成自动生成的python3 manage.py migrate时报下面的错误 django.db.utils.InternalError: (1091, "Can't D ...

  7. oracle数据库连接不上

    Oracle数据库1521端口telnet不通 现象:服务器的ip地址可以ping通,但是安装oracle过程中的指定的“1521”端口telnet不通过 解决办法:1.确保防火墙对1521端口开启: ...

  8. Android 基础 (四大组件,五大存储,六大布局)

    Android四大组件: 参考:https://blog.csdn.net/shenggaofei/article/details/52450668 Android四大组件分别为activity.se ...

  9. POJ-1426.Findthemultiple.(BFS)

    一开始模拟了一波大数取余结果超时了,最后改成long long过了emmm... 本题大意:给出一个200以内的数n,让你找出一个m使得m % n == 0,要求m只有1和0组成. 本题思路:BFS模 ...

  10. fbx模型加载的材质球路径

    选择Location为外部加载时,会通过搜索来读取外部文件 From Model's Material 搜索项目中Materials文件 [ModelName].mat 会优先搜索当前子文件夹有没有 ...