实验一:实验报告
课程:程序设计与数据结构
班级: 1623
姓名: 张旭升
学号:20162329
指导教师:娄嘉鹏 王志强
实验日期:9月25日
实验密级: 非密级
预习程度: 已预习
必修/选修: 必修
实验序号: cs_29
实验名称: Java线性表的应用,实现和分析
实验内容
1. Java中的线性表的测试:过程,问题
2. Java中的线性表的应用:过程,问题
3. 顺序表的实现(伪代码,产品代码,测试代码):过程(分析,设计,实现,测试),问题
4. 链表的实现(伪代码,产品代码,测试代码):过程(分析,设计,实现,测试),问题
5. Java ArrayList,LinkedList源码分析:过程,学到的技巧
实验要求
1.没有Linux基础的同学建议先学习《Linux基础入门(新版)》《Vim编辑器》 课程
完成实验、撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是 运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决 办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可 以得到什么启示,有什么收获,教训等)。报告可以参考范飞龙老师的指导
严禁抄袭,有该行为者实验成绩归零,并附加其他惩罚措施。
实验过程
一.Java中线性表的测试
1.MyList类:
Java中提供了两种线性表,分别是ArrayList
和LinkedList
,我分别对它们每种类的其中三个主要方法进行了Junit单元测试:
ArrayList | LinkedList |
---|---|
boolean : isEmpty() | boolean : contains(Object o) |
boolean : add(Object o) | boolean : add(Object o) |
Object : remove(int index) | boolean : remove(Object o) |
注意:
在测试中我发现,两种线性表在Java源代码中是受保护无法直接进行单元测试的,我只能自己写一个
MyList
来继承上面两个类,然后通过将需要测试的方法复写一下只需要调用父类的该方法就可以直接进行单元测试了。
2.测试结果及代码
测试代码
ArrayList测试代码
LinkedList测试代码
测试截图
二.用Java线性表实现有序线性表的合并
实现代码
- 实现代码
测试代码
测试截图
三.用数组实现线性表
1.实现代码分析:
创建数组线性表的思路和课上的Bag类是很类似的,具体做法也是在Bag类的基础上进行了一些功能的改进,比如实现了存储空间的自增长等
思路:
在每次往数组中线性的添加元素时都会进行一个判断,如果数组已经没有空位时,就会进行一个变换的操作,新建一个多10位的数组(数组初始大小为10)然后将原数组中的元素遍历出来放入新建数组,然后将新建数组赋给原数组的引用,即使数组长度增加了10
2.实现代码及测试
- 实现代码
- 测试代码
3.测试截图
四.用链表实现线性表
1.实现代码分析:
定义一个链表的类,然后在类中创建两个变量,一个为泛型变量,一个是该类的对象,这个类的对象将会作为一个指针,在链表中每创建一个新的元素时,就会> > 实将指针实例化。
2.实现代码及测试代码
- 实现代码
- 测试代码
3.测试截图
五.ArrayList与LinkedList源码分析
1.源码调取
我所分析的源码是从IDEA中直接调取的,具体操作是在IDEA中连按两次Shift键就会弹出一个搜索框,然后在搜索框中分别搜索ArrayList和LinkedList就可以调出 这两个类的源代码
2.源码分析
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
参考资料:
java集合框架05——ArrayList和LinkedList的区别
Java中ArrayList和LinkedList区别