第八周学习总结-20175218
20175218 2018-2019-2 《Java程序设计》第八周学习总结
教材学习内容总结
- 第十五章主要讲的就是泛型、链表、堆栈、散列映射、树集以及树映射。
- 泛型
- 泛型的主要目的是可以建立具有类型安全的集合框架,如链表、散列映射等数据结构。
- 可以使用“class 名称<泛型列表>”声明一个类,为了和普通的类有所区别,这样声明的类称作泛型类。
- 和普通的类相比,泛型类声明和创建对象时,类名后多了一对“<>”,而且必须要用具体的类型替换“<>”中的泛型。
- Java泛型重要的一个优点就是:在使用这些泛型类建立的数据结构时,不必进行强制类型转换,即不要求进行运行时类型检查。
- 链表
- 链表是由若干个称作结点的对象组成的一种数据结构,每个结点含有一个数据和下一个结点的引用,或含有一个数据并含有上一个结点的引用和下一个结点的引用。
- 链表对象可以使用 iterator() 方法获取一个 Iterator 对象,该对象就是针对当前链表的迭代器。
- 排序链表或查找某对象是否和链表中的结点中的对象相同,都涉及对象的大小关系。
- 堆栈
- 堆栈是一种“后进先出”的数据结构,只能在一端进行输入或输出数据的操作。
- 堆栈把第一个放入该堆栈的数据放在最底下,而把后续放入的数据放在已有数据的顶上。
- 向堆栈中输入数据的操作称为“压栈”,从堆栈中输出数据的操作称为“弹栈”。
- 散列映射
- HashMap<K,V>泛型类实现了泛型接口 Map<K,V>,HashMap<K,V> 类中的绝大部分方法都是 Map<K,V> 接口方法的实现。
- public Collection
values() 方法返回一个实现 Collection 接口类创建的对象,可以使用接口回调技术,即将该对象的引用赋给 Collection 接口变量,该接口变量可以回调 iterator() 方法获取一个 Iterator 对象,这个 Iterator 对象存放散列映射中所有键/值对中的值。 - 对于经常需要进行查找的数据可以采用散列映射来储存这样的数据,即为数据指定一个查找它的关键字,然后按着键/值对,将关键字和数据一并存入散列映射中。
- 树集
- 树集用 add 方法添加结点,结点会按其存放的数据的“大小”顺序一层一层地依次排列,在同一层中的结点从左到右按“大小”顺序递增排列,下一层的都比上一层的小。
- 树映射
- TreeMap<K,V> 类实现了 Map<K,V> 接口,称 TreeMap<K,V> 对象为树映射。
- 树映射使用 public V put(K key,V value)方法添加结点,该结点不仅存储数据 value ,也存储和其关联的关键字 key ,也就是说,树映射的结点存储关键字/值对。
- 和树集不同的是,树映射保证结点是按照结点中的关键字升序排列。
教材学习中的问题和解决过程
-
问题1:LinkedList链表和ArrayList数组表有什么不同
-
问题1解决方案:通过上网查资料,得知:
- ArrayList和Vector使用了数组的实现,可以认为ArrayList或者Vector封装了对内部数组的操作,比如向数组中添加,删除,插入新的元素或者数据的扩展和重定向。LinkedList使用了循环双向链表数据结构。与基于数组ArrayList相比,这是两种截然不同的实现技术,这也决定了它们将适用于完全不同的工作场景。具体可见博客:链接。这是一篇关于ArrayList和LinkedList的区别,感觉解释得还挺好的。
-
问题2:不太清楚用迭代器来优化链表
-
问题2解决方案:在网上翻阅博客,找到了一篇写得不错的博客:点击进入链接
代码调试中的问题和解决过程
- 问题1:最开始看到例子一就没看懂 E bottom这句是啥意思
- 问题1解决方案:后来发现前面用public class Cone 声明了这个类,然后这就是用泛型类 E 声明对象 bottom
- 问题2:一开始看的时候,没看懂import javax.swing.*这句
- 问题2解决方案:通过上网查询资料,得知:
- 学名叫导包,就是把那个文件夹下的什么东西拿来,然后我要用。import javax.swing.;分着看这句,import是引入的意思;javax.swing 这个是路径,在 javax 这个文件夹下的 swing 文件夹; , 表示全部的意思;整个这句话的理解就是,把 javax 包里面的 swing 包里面的所有东西引进来。
代码托管
statistics.sh脚本运行截图:
上周考试错题总结
- 无
其他(感悟、思考等,可选)
对第四周的课下测试题进行了总结,链接如下:
第四周测试总结分析
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 1/1 | 24/24 | |
第二周 | 400/600 | 1/2 | 15/39 | |
第三周 | 600/1200 | 1/3 | 18/57 | |
第四周 | 700/1900 | 1/4 | 18/75 | |
第五周 | 800/2700 | 5/9 | 18/93 | |
第六周 | 800/3500 | 3/12 | 28/121 | |
第七周 | 800/4300 | 3/15 | 18/139 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:24小时
-
实际学习时间:26小时
-
改进情况:
相比于上周,在较少的时间内,完成了更多的任务
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)