20172308《Java软件结构与数据结构》第二周学习总结
教材学习内容总结
第 3 章 集合概述——栈
- 集合:一种聚集、组织了其他对象的对象
- 软件系统中的另一个类或对象通过集合预定的方式与该集合进行交互来使用这些集合
- 多年以来软件开发和研究人员定义了一些特定的集合类型致力于解决特定的问题类别
- 集合分类:线性集合(元素按直线方式组织的集合),非线性集合(非直线方式组织)
线性集合还可以根据元素的特征保持有序(如姓氏;非线性集合元素也可以)
抽象:隐藏某些细节
- 抽象数据类型(ADT):一种在程序设计语言中尚未定义其值和操作的数据类型
- 数据类型:一组值及作用于这些数值上的各种操作(如加减)
- 集合是一种隐藏了实现细节的抽象(集合定义了一些接口操作)
- 系统被划分成一些抽象的子系统,规定出这些子系统的目标以及它们之间的交互作用(以便不同的人员进行开发)
- ADT的抽象性体现在ADT必须对其实现的细节进行定义,且这些对用户不可见,所以,集合是一种抽象数据类型
- 数据结构:一种用于实现集合的编程结构集
- Java集合API(应用程序编程接口):一个类集,表示一些特定类型的集合
第 四 章 链式结构——栈
- 栈:一种线性集合,后进先出
2.泛型:
- 定义一个类,尖括号中包含指向该类型的引用,以便他能够存储、操作和管理在实例化之前没有指定是何种类型的对象
- 不能被实例化,他只是一个占位符
- 类的泛型,只有当该类被实例化时,才创建该类型的对象
- 使用泛型来创建可用于安全高效地存储任意类型的对象的集合
3.链表
- 由一些对象构成,其中每个对象指向了链表的下一对象
- 链表的首结点处理需要特别小心,以防止链表丢失
教材学习中的问题和解决过程
问题1:如何理解抽象和抽象数据类型
问题1解析:抽象数据类型和数据类型在实质上是一个概念,只不过是对数据类型的进一步抽象,不仅限于各种不同的计算机处理器中已经实现的数据类型,还包括为解决更为复杂的问题而由用户自定义的复杂数据类型。
所谓数据抽象是指用ADT描述程序处理的实体时,强调的是其本质的特征,无论内部结构如何变化,只要本质特性不变,就不会影响其外部使用。
例如,在程序设计语言中,经常使用的数据类型 int,它就可以理解为是一个抽象数据类型,在不同的计算机或者操作系统中,它的实现方式可能会有不同,但是它本质上的数学特性是保持不变的。
例如,在统计学生信息时,经常使用姓名、学号、成绩等信息,我们可以定义这样的一个抽象数据类型student,它封装了姓名、学号、成绩三个不同类型的变量,这样操作student的变量就能够很方便的知道这些信息了。
【参考资料】如何理解数据结构中的抽象数据类型?
问题2:如何理解“通过使用接口名作为返回类型,方法就不会局限于实现栈的任何特定类”
问题2解析:接口把方法的特征和方法的实现分割开来。这种分割体现在接口常常代表一个角色,它包装与该角色相关的操作和属性,而实现这个接口的类便是扮演这个角色的演员。
Java接口本身没有任何实现,因为Java接口不涉及表象,而只描述public行为,所以Java接口比Java抽象类更抽象化。
【参考资料】java 使用接口的好处?
代码运行中的问题及解决过程
问题1:在实现链表的删除节点的代码运行中出现了如图问题:

运行不出结果,猜测应该是循环出了问题,无限循环?
代码如图:

循环里的条件,删除的节点为空的可能性很小,所以要再加上一个条件,如图:

要删除的节点中的学号与当前节点中的学号相等时即可跳出循环。
还顺便测试了一下在删掉了插入节点的左右两端的其中一个节点之后,还能否正常插入节点,emmm,是不行滴:

上周考试错题总结
错题1:

错题1解析:emmm, 手误
错题2:

错题2解析:不是很理解为什么是错的;一个高效的系统的程序算法肯定比一些冗杂的程序算法解决问题要容易的多吧,而且占用内存、CPU啥的都很少吧。百度的话也没看到相关解释
错题3:

错题3解析:栈的数据存储位置可能不是连续的,但是栈里的每一个对象都有指向下一对象的引用,用数组实现的栈也是一样的
错题4:

错题4解析:这题的C选项写的可能是2^n吧
代码托管
由于上学期的最后的代码统计是在虚拟机里统计的,和IDEA有所差距

下面是这学期IDEA的统计结果

所以,手动统计了一下代码数量,560行
结对及互评
- 博客中值得学习的或问题:
- 侯泽洋同学的博客排版工整,界面很美观
- 问题总结做得很全面
- 对于书上的疑惑总会想办法解决它,这种探索的精神值得我去学习
- 代码中值得学习的或问题:
- 对于编程的编写总能找到角度去解决
- 本周结对学习情况
- 20172302
- 结对学习内容
- 第三章内容:集合概述——栈
- 第四章内容:链式结构——栈
学习进度条
| 代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
|---|---|---|---|---|
| 目标 | 5000行 | 30篇 | 400小时 | |
| 第一周 | 0/0 | 1/1 | 4/4 | |
| 第二周 | 560/560 | 1/2 | 6/10 |
20172308《Java软件结构与数据结构》第二周学习总结的更多相关文章
- 《JAVA程序设计》_第二周学习总结
20175217吴一凡 一.IDEA的安装和使用 参考老师的教程Intellj IDEA 简易教程. 1.IDEA的安装 因为我已经习惯了在Linux上敲代码,所以我决定将IDEA安装在虚拟机上. 首 ...
- 20172329 2018-2019《Java软件结构与数据结构》第一周学习总结
2018-2019-20172329 <Java软件结构与数据结构>第一周学习总结 在这学期就已经大二了,也已经步入了学习专业课的核心时间,在这个阶段,我们应该了解自己的学习情况,针对自己 ...
- 20172328 2018—2019《Java软件结构与数据结构》第二周学习总结
20172328 2018-2019<Java软件结构与数据结构>第二周学习总结 概述 Generalization 本周学习了第三章集合概述--栈和第四章链式结构--栈.主要讨论了集合以 ...
- 2018-2019-20172329 《Java软件结构与数据结构》第二周学习总结
2018-2019-20172329 <Java软件结构与数据结构>第二周学习总结 教材学习内容总结 <Java软件结构与数据结构>第三章 集合概述--栈 一.集合 1.我们印 ...
- 20172305 2018-2019-1 《Java软件结构与数据结构》第二周学习总结
20172305 2018-2019-1 <Java软件结构与数据结构>第二周学习总结 教材学习内容总结 本周内容主要为书第三章和第四章的内容: 第三章(以数组来替代栈的作用) 集合(聚集 ...
- 20172328 2018-2019《Java软件结构与数据结构》第一周学习总结
20172328 2018-2019<Java软件结构与数据结构>第一周学习总结 概述 Generalization 本周学习了软件质量.数据结构以及算法分析的具体内容,主要依托于所用教材 ...
- 20172328 2018-2019《Java软件结构与数据结构》第三周学习总结
20172328 2018-2019<Java软件结构与数据结构>第三周学习总结 概述 Generalization 本周学习了第五章:队列.主要内容包含队列的处理过程.如何用对例如求解问 ...
- 20172328 2018-2019《Java软件结构与数据结构》第五周学习总结
20172328 2018-2019<Java软件结构与数据结构>第五周学习总结 概述 Generalization 本周学习了第九章:排序与查找,主要包括线性查找和二分查找算法和几种排序 ...
- 20172328 2018-2019《Java软件结构与数据结构》第六周学习总结
20172328 2018-2019<Java软件结构与数据结构>第六周学习总结 概述 Generalization 本周学习了第十章:非线性集合与数据结构--树.主要讨论了树的使用和实现 ...
- 20172328 2018-2019《Java软件结构与数据结构》第七周学习总结
20172328 2018-2019<Java软件结构与数据结构>第七周学习总结 概述 Generalization 本周学习了第11章:二叉查找树.在本章中,主要探讨了二叉查找树的概念和 ...
随机推荐
- github与gitlab与git三个基佬的故事
我们了解了git是以个人为中心,但是人人都得数据交互呀..python程序员每天都忙着进行py交易 交互数据的方式 使用github或者码云等公有代码仓库,托管代码的地方,谁都可以看 公司内部使用gi ...
- 使用 SP_OAXXX 创建文件夹,注意区别于 xp_cmdshell --mkdir xxx
sp_configure 'show advanced options',1 go reconfigure with override go sp_configure 'Ole Automation ...
- 【学习笔记】Spring AOP注解使用总结
Spring AOP基本概念 是一种动态编译期增强性AOP的实现 与IOC进行整合,不是全面的切面框架 与动态代理相辅相成 有两种实现:基于jdk动态代理.cglib Spring AOP与Aspec ...
- swift3.0之后的Error处理
在之前的版本中,Swift中Error与OC中NSError没有关系.但是现在两者可以互相强转. 我们看看两者的区别:Error是一个实现Error协议的枚举或者结构体,对外能够获取的具体信息只有ra ...
- Raid 磁盘阵列
raid 原理与区别 raid0至少2块硬盘.吞吐量大,性能好,同时读写,但损坏一个就完蛋 raid1至少2块硬盘.相当镜像,一个存储,一个备份.安全性比较高.但是性能比0弱 raid5至少3块硬盘. ...
- 如何使用gifsicle压缩gif图片
最近我写了一些关于如何将各种形式的多媒体格式相互转换的文章,特别是GIF动图方面的,比如如何将小视频转换成GIF动图或将GIF动图转换成视频,有很多像ImageMagick,ffmpeg这样的工具帮助 ...
- Android sdk安装目录中没有platform-tools目录问题详解
sdk下载地址 http://tools.android-studio.org/index.php/sdk 安装步骤很简单,百度即可. 下面详细说一下,在安装中遇到android sdk下没有plat ...
- 010_MAC下权限问题的那些事
一. arun:bin arunyang$ sh catalina.sh start #启动tomcat报一堆的没有权限~~~~(>_<)~~~~ 二.解决如下 aru ...
- centos7.2环境yum方式快速搭建lnmp环境nginx+mariadb+php-fpm
centos7.2环境yum方式安装nginx+mariadb+php-fpm 1.安装lnmp环境 安装epel源 yum install -y epel-release 安装 MySQL + PH ...
- 巧用PHP双$功能兼容线上线下配置文件
2014年2月8日 19:27:05 情景: 开发过程中线上和线下的配置文件中的值是不一样的 例如:线上生产环境的样式域名为ie.style.abc.com,而开发环境为ie.style.abc.ne ...