20172306《Java程序设计与数据结构》第十周学习总结
20172306《Java程序设计》第十周学习总结
教材学习内容总结
本章主要的讲的是集合有关的知识:
1.集合与数据结构
- 集合是一种对象,集合表示一个专用于保存元素的对象,并该对象还提供增添、删除等管理所保存元素的服务。
- 同构:就是存放同种类型。异构:就是可以存放不同类型的。
- 一个抽象数据类型室友数据和在该数据上所实施的具体操作构成的集合。
- 对象实际上就是将变量和相关的方法封装在一起的实体。
- 集合可以用各种方式实现,我认为这是集合的一个很特别的方面。
2.数据结构的动态表示
- 数组是有局限性的,根据第八章可以知道,我们在创建一个数组的时候需要给数组一定的长度,对于数组来说,每当需要扩大数组时,就创建一个更大的数组并将原有的数组复制到新数组。这说明数组有局限;而我们学习的ArrayList的长度不是固定的,这就有很大的空间给我们的设计者。
- 学习了动态链接的列表。主要是是要了解它在增加和删除还有插入的过程,对于删除和插入已经在码云中有代码。这一部分是我认为比较重要的一点。对于在串联的时候,应该将其看作一个指针,继而不断的进行联系,还要考虑到连接方式的先后顺序,避免会出现丢失的现象。
3.线性数据结构。
- 队列类似于列表,队列使用先进先出。堆栈使用后进先出。对于栈的内容,在编程四则运算中就运用了栈的相关内容。
- 学习了LinkedList的一些内容,在教材问题中有解答。
4.非线性数据结构
- 树:由一个根节点和构成层次结构的多个节点组成。类之间的继承关系可以用一棵普通的树结构来表示。用静态表示方式(数组)实现树数组结构也是有可能的。
- 图:图没有像树根节点那样的初始入口点。与树类似,虽然可以用数组实现图,但是更常用动态链实现图。
5.Java集合类API
- Java集合类API中的类定义为泛型,是指一个集合所管理的对象的类型要在实例化该集合的对象时才确定。泛型保证了集合中对象类型的兼容性。
教材学习中的问题和解决过程
-
问题1:书中写了抽象数据类型,但是我还是对于书中写的不是很理解。
-
问题1解决方案:书中说ADT是由数据和在该数据上所实施的具体操作构成的集合。ADT之所以被称为抽象数据类型,是因为ADT上可以执行的操作与底层的实现分离开了。后来我又上网查了一下有关ADT的有关知识,主要内容是开发者可以利用ADT的方法来使用ADT的相关属性,但是并不知道它究竟是如何操作的。线性表、堆栈、队列就属于ADT。线性表,堆栈和队列的内部结构可以用许多方式实现。例如,我们可以使用一个有序数组或者一个链表来实现每个结构。关键的一点是不论你如何实现其内部结构,它对外的接口总是不变的。这使得你能够修改或者升级底层的实现过程而不需要改变公共接口部分。具体我参照了这篇博客API
-
问题2:对于书中说要做insert的方法和delete的方法。最开始我大致懂得它的大致思路,但是其具体的流程还是不懂。
-
问题2解决方案:老师在课上讲了,但是后来再想的时候,就记得不清晰了,然后问了同学,才知道它整个的流程是怎样的。
1.插入:首先要判断是在开头还是在中间,如果是开头,只需要将指针指向要插入的部分,然后和之后的相连接,就可以了。如果是在中间的话,需要先将所插入部分和后面的部分相连,然后再和前面的相连接,这样的顺序是为了避免后面的东西被当做垃圾而消失。
2.删除:如果是最后一个的进行删除,只需要将前一个的下一个指针为空即可。如果是要删除中间的某个,只需要将其前一个的指针指向要删除的后一个就可以,这样越过要删除的,就可以保证链条中删除这个。 -
问题3:老师在上课的时候有提到Linkedlist的相关知识,所以自己上网找了一下。
-
问题3解决方案:LinkedList我自己通过网上的一些教程,利用IDEA学习了一些有关的内容。
建立一个Linkedlist的对象,实现对其中进行增加内容:
对于已有的一部分,对首项和尾项进行了增添:
对首项进行删除以及对指定的索引的地方进行删除:
对指定的索引处的值进行改变:
其实还有很多内容,包括Linkedlist和数组以及队列还有Arraylist的转换等内容,还在继续学习。
代码调试中的问题和解决过程
在学习的时候,这一章的内容主要内容都是大同小异的所以只要了解其中的套路就可以编写,所以这周的代码我没有什么具体的问题,有几个比较基础的问题已经问了同学解决了。
代码托管
上周考试错题总结
本题选B 重载只是为具有不同参数列表的方法提供了备选方案。重写提供了多态性,因为适当的方法是根据当前被引用的对象而调用的。嵌入是类中包含的类。抽象与多态没有任何关系。封装是使用可见性修饰符(公共的、私有的、受保护的)实现的。
本题选A Upcasting是完全安全的,它是Java支持的单一继承结构的产物。相比之下,Downcasting必须由程序员显式地完成。Java只在一个方向上自动转换。在使用的可见性修饰符方面,Upcasting和Downcasting的规则并不依赖于任何方式。
本题选A 虽然继承和接口支持多态,但只有在有后期绑定时才会这样做。但是,重载是多态性一(方法)名的一种形式,多个主体,只要程序使用重载,多态就在使用中。
本题A 精确!由于println()本质上是高度多态的,所以它能够正确地打印各种预定义的(库)和内置(原始)数据。
结对及互评
结对伙伴
-
博客中值得学习的或问题
-
他在博客中写有关数组和集合之间的区别,看了之后自己也学到了这种知识。
-
他在看书的时候想到的问题都很有思想,而且可以抛开书本看网上的内容并学习,值得学习。
-
基于评分标准,我给本博客打分:8分。
点评过的同学博客和代码
-
本周结对学习情况
- 结对学习内容
- 我们一起学习了第十三章的内容。
- 继续了四则运算的项目,将项目完善。
- 进行了蓝墨云的实验。
- 结对学习内容
其他(感悟、思考等,可选)
第十三章学完了,我们《Java程序设计和数据结构》这本书就算是学完了。这一章的内容不是很多,而且自己是在老师讲完课之后自己才看的书,所以理解起来更明白些。总的来说,这本书结束了,虽然学到了一些东西,但是可能放在Java的时间不够多再加上进程太快了,自己对于整本书的掌握一直处于半懂半不懂的程度。如果要我自己对于这个学习打一个分的话,我只能给自己打5分,没有及格。所以在之后的学习中,如果有可能,还希望能够重新温习一下。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 193/200 | 1/1 | 20/20 | |
第二周 | 247/440 | 1/1 | 22/42 | |
第三周 | 445/895 | 2/2 | 20/62 | |
第四周 | 885/1780 | 1/1 | 43/105 | |
第五周 | 775/2555 | 1/1 | 55 /160 | |
第六周 | 1171/3726 | 1/1 | 38/198 | |
第七周 | 596/4322 | 1/1 | 60/258 | |
第八周 | 569/4891 | 2/2 | 55 /313 | |
第九周 | 1890/ 6781 | 1/1 | 66/379 | |
第十周 | 1021/7793 | 1/1 | 70/449 |