教材学习内容总结
1.集合
- 定义:专门用于保存信息的对象。
- 集合的同构和异构:
- 同构:集合中保存的类型所有相同。
- 异构:集合中能够保存所有的类型。
2.数据结构
- 数据结构分类:

- 动态数据结构:一个动态数据结构使用链来实现,它的大小规模能够随意增大减少。
- 线性数据结构
- 队列(queue)
- 采起先进先出的方式,使用于有等待特色的排列。
- 方法摘要:

- 堆栈(stack)
- 采起先进后出的方式,使用于有叠加特色的排列。
- 方法摘要:

- 非线性数据结构
- 树
- 由一个根节点和构成层次结构的多个节点(内部节点)组成
- 特殊树——二叉树:二叉树的每一个节点不能有超过两个的子节点

- 图
- 图没有初始入口点
- 在一个图中,从一个节点到另外一个节点的链接边称边,边能够是双向的,也能够是单向的。
- 当事物间的关系比较复杂没法用正常的层次结构来表现时,图是一种很好的选择。
- 没找到示意图_(:з」∠)_
3.Java集合类API

- 泛型:只一个集合所管理的对象的类型要在实例化给集合对象时才肯定。
教材学习中的问题和解决过程
- 问题1:arraylist和linkedlist的区别?
- 问题1解决方案:经过查找得知:(1)ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。(2)对于随机访问get和set,ArrayList以为优于LinkedList,由于LinkedList要移动指针。(3)对于新增和删除操做add和remove,LinedList比较占优点,由于ArrayList要移动数据。但这一点要看实际状况的。若只对单条数据插入或删除,ArrayList的速度反而优于LinkedList。但如果批量随机的插入删除数据,LinkedList的速度大大优于ArrayList。由于ArrayList每插入一条数据,要移动插入点及以后的全部数据。
- 问题2:数据结构的划分好像和咱们上课讲的不同,那么数据结构究竟在java中有哪些方法?
- 问题2解决方案:在查找过程当中发现了一张类型很全的图,其中实线边框的是实现类,折线边框的是抽象类,而点线边框的是接口

- (看告终对伙伴的博客后增长的问题)问题3:队列、树、图如何用代码来实现?
- 问题3解决方法:
- 队列。队列分为单队列和循环队列两种,单队列又可分为顺序队列和链式队列。单队列是一种常见的队列,每次添加元素时都会放到队尾,但单队列中偶尔会出现“假溢出”的状况,针对这种状况,就可使用循环队列,从新从头开始添加,就像一个圆环同样,头尾相连。代码实现:java队列实现
- 关于图的内容,看了一下张昊然同窗给的网址,它主要讲的是如何用邻接表的方式来实现图的,而这篇博客其实还有一个下篇:数据结构--图 的JAVA实现(下),讲的是如何利用邻接表作一个有向无环图。而在上篇的博客中提到图有两种表示方法:邻接表和邻接矩阵,但该博客里只讲了一种方法,因此我又去查了另一种方法:java中图的两种存储方式。
- 树。树的实现有两种方法,分别是以数组的形式和以链表的形式。
//数组形式(又称父节点表示法)
public class TreeNode {
private Object mData; //存储的数据
private int mParent; //父亲节点的下标
public TreeNode(Object data, int parent) {
mData = data;
mParent = parent;
}
public Object getData() {
return mData;
}
public void setData(Object data) {
mData = data;
}
public int getParent() {
return mParent;
}
public void setParent(int parent) {
mParent = parent;
}
}
public static void main(String[] args){
TreeNode[] arrayTree = new TreeNode[10];
}
//链表形式
public class LinkedTreeNode {
private Object mData; //存储的数据
private LinkedTreeNode mParent; //父亲节点的下标
private List<LinkedTreeNode> mChildNodeList; //孩子节点的引用
public LinkedTreeNode(Object data, LinkedTreeNode parent) {
mData = data;
mParent = parent;
}
public Object getData() {
return mData;
}
public void setData(Object data) {
mData = data;
}
public Object getParent() {
return mParent;
}
public void setParent(LinkedTreeNode parent) {
mParent = parent;
}
public List<LinkedTreeNode> getChild() {
return mChildNodeList;
}
public void setChild(List<LinkedTreeNode> childList) {
mChildNodeList = childList;
}
}
代码调试中的问题和解决过程
- 问题1:在运行PP13.3的驱动类时,输出的结果为
null
.

- 问题1解决方案:使用DeBug进行调试发现,若是我设置的循环条件是list不为空的话,当它为空时才能跳出循环,而当它为空时,等于说原来指针后面的东西所有丢掉了,因此最后输出结果也为空。解决方法是又添加了一个指针pre,使
pre=list
,而后把全部原来是list的地方都改为pre,这样就避免了list变为空,程序也就能正常运行了。
代码:

commit提交:

html
上周考试错题总结(正确为绿色,错误为红色)
- 错题1:Assume infile is a BufferedReader for a textfile and that the textfile is empty. What is returned from the message infile.readLine( ); ?
- A . 0
- B . null
- C . a special character known as the End-of-file marker (EOF)
- D . none of the above, the message causes a NullPointerException to be thrown
- E . none of the above, the message causes a EndOfFileException to be thrown
- 缘由及理解状况:当时查JDK的时候它的原话是“若是已到达流末尾,则返回 null”,
因此以为B不对应该是抛出一个错误。后来想了一下加入文件为空的话等于说它刚进去就达到了末尾,因此会返回“null”。
- 错题2:If an exception arises in a catch statement, and the exception is of the type caught by the catch statement, then the catch statement catches the same exception. For instance, if the following catch statement first catches an ArithmeticException and, while executing, throws another ArithmeticException, it is able to catch the second ArithmeticException as well the first.
catch (ArithmeticException ex) {...}
- 缘由及理解状况:catch语句不会捕获从它自身内部抛出的异常,尽管catch语句能够在其中嵌套额外的try和catch语句。
结对及互评
点评模板
- 博客中值得学习的或问题:
- 优势:在看他的问题和解答时发现了不少本身以前其实也不清楚可是没发现的问题,并且他的问题解答都比较简明扼要,我结合他的问题又在本身的博客中进行了修改(已标注)除此以外发现本身的博客没有上传commit截图,现已添加。
- 缺点:教材内容总结仍是没有很大改进...内容仍是过于简单。
- 代码中值得学习的或问题:
- 本周优势和缺点结合着说吧,看了一下PP项目,有些借鉴,但很好的一点是否是把代码直接复制过来,而是在看懂以后并加入了本身的理解,注释了不少。我听一个学长说过,真正作项目的时候是不可能完彻底全本身把一个程序的全部代码都想出来的,总会或多或少有一些借鉴,因此说借鉴不是坏事,重要的是学会所借鉴的内容中所使用的方法和思想。
点评过的同窗博客和代码
- 本周结对学习状况
- 20172322
- 结对学习内容
- 共同讨论了书上的MagzineList类,询问了老师,真正理解了代码的含义。
- 帮助张昊然同窗解决了PP9.1的问题,提供了PP13.3当中使用链表实现选择排序的思路。
其余(感悟、思考等,可选)
- 最近看完了一本书,里面的主角的一句话我很喜欢,感受对待java学习、对待其余学业学习、对待人生,都应该有这种态度:珍惜天赋,保持悲悯。这里的“悲悯”我以为能够理解为是一种谦虚,一样是一种包容,仍是一种求真和探索。我的认为在java方面本身是一点天赋都没有的,但依旧要保持这种“悲悯”的心态去努力地求学。
学习进度条
目标 |
5000行 |
30篇 |
400小时 |
|
第一周 |
120/120 |
1/1 |
9/9 |
|
第二周 |
246/366 |
1/2 |
9/18 |
|
第三周 |
785/1121 |
2/4 |
15/33 |
|
第四周 |
615/1736 |
1/5 |
20/53 |
|
第五周 |
1409/2645 |
1/6 |
24/77 |
|
第六周 |
561/3206 |
1/7 |
20/97 |
再次搞清了一些本身有点含糊不清的概念 |
第七周 |
63/3269 |
1/8 |
15/112 |
|
第八周 |
2476/5745 |
3/11 |
90/201 |
|
第九周 |
824/6595 |
1/12 |
20/221 |
|
第十周 |
919/7514 |
2/14 |
20/241 |
|
参考资料