实验一 线性结构
实验1
ArrayList和LinkedList测试:
查看ArrayList和LinkedList的Java API帮助文档,参考http://www.cnblogs.com/rocedu/p/4837092.html 用Junit对ArrayList和LinkedList的方法进行测试,要尽量覆盖正常情况,异常情况,边界情况
提交单元测试运行截图,要全屏,包含学号信息
实验2
分别用Java的ArrayList和LinkedList实现有序线性表的合并:
aList,bList都是非递减线性表,合并后也是非递减
public static List<? extends Comparable> mergeSortedList(List<? extends Comparable> aList,
List<? extends Comparable> bList)
测试mergeSortedList的正确性,要尽量覆盖正常情况,异常情况,边界情况,提交测试代码运行截图,包含学号信息
课下把代码推送到代码托管平台
实验3
参考Java Foundation 3rd 第15.6节,用数组实现线性表List
用JUnit或自己编写驱动类对自己实现的ArrayList进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息
课下把代码推送到代码托管平台
实验4
参考Java Foundation 3rd 第15.7节,用链表实现线性表List
用JUnit或自己编写驱动类对自己实现的LinkedList进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息
课下把代码推送到代码托管平台
实验5
源码分析:
参考http://www.cnblogs.com/rocedu/p/7483915.html对Java的ArrayList,LinkedList按要求进行源码分析,并在实验报告中体现分析结果
在IDEA中可以找到源代码,首先通过public class ArrayList E extends AbstractList E implements List E, RandomAccess, Cloneable, java.io.Serializable
可以看出其支持泛型,且继承自AbstractList,因此很多接口比如RandomAccess、Cloneable等接口都可以用,ArrayList提供了三个构造方法,根据网上的说法来看。
第一个构造方法使用提供的initialCapacity来初始化elementData数组的大小。
第二个构造方法调用第一个构造方法并传入参数10
第三个构造方法则将提供的集合转成数组返回给elementData
LinkedList插入和删除操作时要比ArrayList更加高效,因为它是链表的,因此它的随机访问要比ArrayList差。
LinkedList继承自AbstractSequenceList
LinkedList有两个构造方法。根据网上的说法来看。
第一个构造方法不接受参数,只是将节点的前一节点和后一节点都设置为自身,这样整个链表就只有一个节点,用于表示一个空的链表。
第二个构造方法接收一个参数,调用第一个构造方法构造一个空的链表,之后通过addAll将其中元素全部添加到链表中。
感受:学习Java最好的话可以看看源代码。通过看源代码会发现这些东西为什么会这个样子,有哪些东西不能去做,实际应该怎么做等等的问题。最后,可想而知这些代码都是高手们写出来的,对于我们这些初学者来说很有学习意义与借鉴意义。