2018-2019-20172329 《Java软件结构与数据结构》第四周学习总结
经过这样一个国庆节的假期,心中只有一个想法,这个国庆假期放的,不如不放呢!!
教材学习内容总结
《Java软件结构与数据结构》第六章-列表
一、列表集合概念
- 1.链表是一种实现策略,使用引用开在对象之间创建链接,而列表集合是一种概念性表示法,其思想是使事物以线性列表的方式进行组织。
- 注:列表也可以是用链表或数组来实现。列表集合没有内在的容量大小,它可以随着需要而增大。
- 2.列表集合有三种类型:
(1)有序列表(order list),其元素按照元素的某种内在特性进行排序。
(2)无序列表(unordered list),其元素间不具有内在顺序,元素按照它们在列表中的位置进行排序。
(3)索引列表(indexed list),其元素可以用数字索引来引用。 - 3.Java 集合的API中的列表
操作 | 描述 |
---|---|
add(E element) | 向列表末端添加一个元素 |
add(int index,E element) | 在指定索引处插入一个元素 |
get(int index) | 返回指定索引处的元素 |
remove(int index) | 删除指定索引处的元素 |
remove(E Object) | 删除指定对象的第一个出现 |
set(int index,E element) | 替代指定索引处的元素 |
rsize() | 返回列表中的元素数量 |
二、有序列表
- 1.有序列表是基于列表中元素的某些特性的。比如,我们按人的名字字母进行排序,或者应货物编号来维护存货列表。
- 注:有序列表中的元素具有内在关联,这种关联定义了元素之间的顺序。
三、无序列表
- 1.无序列表中个元素的位置并不基于元素的任何内在特性。
- 注:无序列表中的元素按使用者所选择的任意方式排序。
四、索引列表
- 1.索引列表的各元素间也不存在能够决定它们在列表中的顺序的内在关系。列表的使用者决定了元素的顺序。
- 注:索引列表为它的元素维护一段连续的数字索引值。
- 注:索引列表和数组的根本区别在于:索引列表的索引值总是连续的。如果删除一个元素,其他元素的位置会像“坍塌”了一样以消除产生的间隙,当插入一个元素时,其他元素的索引将进行位移以腾出位置。
教材学习中的问题和解决过程
-
问题1:在理解索引列表与数组的根本区别的时候,可能是因为课本是机器翻译的,存在一些问题,比如,对于我而言,就理解不了什么叫做坍塌了一样,腾出位置.....
-
问题1解决方案:
(1)举个例子:数组假如要赋值的话,就需要说a[1]=某个值,而数组里该位置的值就会被替代了,但是对于列表而言的话,插入元素不会覆盖原有的值。 -
问题2:在书中107页无序列表的adt中的中间插入的方法介绍是这样写的:
把元素添加到列表中某个已有元素的后面。
但是,这就有个问题了,在之前就有过这个问题,假如在一个列表里面同时出现两个或者两个以上相同的元素怎么办?该如何进行判断?
-
问题2解决方法:
(1)第一个想法就是用键入想插入元素的位置,而不是某一个元素的后面,这样可以保证插入的准确性;
(2)第二个方法就是先在某个元素后面插入,假如出现这个对照的元素有两个的情况,再就细节进行判断,需要插入到哪一个的后面。 -
问题3:modCount是什么东西?
-
问题3解决方法:因为在第六章的课本代码里有提及这一方面的东西,而且也有提醒说在第七章有所细节的学习,所以我就看了看第七章,迭代器,虽然modCount变量在此次试验中没有涉及太过重要的角色,但是看到陌生的东西总有好奇。
- (1)modCount:是一个整数变量,一旦集合被修改(添加或删除),它就会增加。
-
因为在第六章还见到一个之前没有了解过的东西,就是串行化。
- (2)串行化:在java中串行化对象必须:
- 1、该对象的类必须实现Serializable接口。
- 2、该对象的串行化成员必须是非静态成员变量,即不能保存任何的成员方法和静态的成员变量,而且串行化保存的只是变量的值,对于变量的任何修饰符,都不能保存。而对于某些类型的对象,其状态是瞬时的,这样的对象是无法保存其状态的,例如一个Thread对象,或一个FileInputStream对象,对于这些字段,我们必须用transient关键字标明 。 (注:保存任何的成员方法和静态的成员变量没有任何的意义,因为对象的类已经完整的保存了他们)
- 3、要串行化一个对象,必须与一定的对象输入/输出流联系起来,通过对象输出流将对象状态保存下来,再通过对象输入流将对象状态恢复。
- (2)串行化:在java中串行化对象必须:
代码调试中的问题和解决过程
-
问题1:在书里有
rear
变量,作用是什么?
-
问题1解决:
(1)第一次出现这个变量的时候应该是在我们学习环形队列的时候,在那个时候,rear代表着数组里的最后一个元素的后一个,所以在不是环形数组里的时候,就可以将其理解为列表中元素的个数。 -
问题2:很久没有学习Comparable接口,忘记了
-
问题2解决方法:
(1)只能自己学习啦。
(2)Comparable接口 -
1.什么是Comparable接口
此接口强行对实现它的每个类的对象进行整体排序。此排序被称为该类的自然排序 ,类的 compareTo方法被称为它的自然比较方法 。实现此接口的对象列表(和数组)可以通过 Collections.sort(和 Arrays.sort )进行自动排序。实现此接口的对象可以用作有序映射表中的键或有序集合中的元素,无需指定比较器。
- 2.实现什么方法
int compareTo(T o)
-
比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
-
参数: o - 要比较的对象。
-
返回:负整数、零或正整数,根据此对象是小于、等于还是大于指定对象。
-
抛出:ClassCastException - 如果指定对象的类型不允许它与此对象进行比较。
上周考试错题总结
-
1:A polymorphic reference uses _______________, not the type of the reference, to determine which version of a method to invoke.
A .the type of the object
B .the type of the reference
C .both A and B
D .none of the above正确答案: A 我的答案: C
解析:多态引用不能使用参考的类型来确定要调用的方法的版本。
-
2、In an array implementation of a Stack, the array is ___________ causing the implementation to have to create a new larger array and copy the contents of the stack into the new array in order to expand the capacity of the stack.
A .Dynamic
B .Static
C .Flexible
D .Polymorphic正确答案: B 我的答案: D
解析:对数组的理解不透彻。
-
3、By using the interface name as a return type, the interface doesn’t commit the method to the use of any particular class that implements a stack.
A .true
B .false正确答案: A 我的答案: B
解析:书中有相似的话,理解有误。
-
4、The implementation of the collection operations should affect the way users interact with the collection.
A .true
B .false正确答案: B 我的答案: A
解析:在翻译后没有特别看懂题目。
-
5、A data structure that uses object reference variables to create links between objects is
A .Linked Structure
B .Pointer
C .Self-referential
D .Array正确答案: A 我的答案: B
解析:没有看清题目,没有看清数据结构几个字,选成了指针。
-
6、A linked implementation of a stack adds and removes elements from the _______ of the linked list.
A .Front
B .Rear
C .Middle
D .None of the above正确答案: A 我的答案: D
解析:应该是头删,尾进,题目模糊。
-
7、The first operation removes an element at the front of the queue and returns a reference to it.
A .True
B .False正确答案: B 我的答案: A
解析:因为删除操作会移动指针,但是不会返回。
代码链接
结对及互评
- 本周结对学习情况
- 博客中值得学习的或问题:
- 内容详略得当;
- 代码调试环节比较详细;
- 基于评分标准,我给本博客打分:5分。得分情况如下:
-
正确使用Markdown语法(加1分):
-
模板中的要素齐全(加1分)
-
教材学习中的问题和解决过程, 一个问题加1分
-
代码调试中的问题和解决过程, 一个问题加1分
- 博客中值得学习的或问题:
- 内容详略得当;
- 代码调试环节比较详细;
- 基于评分标准,我给本博客打分:9分。得分情况如下:
- 正确使用Markdown语法(加1分):
- 模板中的要素齐全(加1分)
- 教材学习中的问题和解决过程, 一个问题加1分
- 代码调试中的问题和解决过程, 一个问题加1分
感悟
同博客开头。。。。。。这个国庆假期真的是太爽了!!!
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | |
---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 |
第一周 | 0/0 | 1/1 | 6/6 |
第二周 | 1313/1313 | 1/2 | 20/26 |
第三周 | 901/2214 | 1/3 | 20/46 |
第四周 | 3635/5849 | 2/4 | 20/66 |
参考资料
蓝墨云班课
Java程序设计与数据结构
串行化
Java中实现对象的比较:Comparable接口和Comparator接口
Comparable接口的实现和使用