实验名称:线性结构实验
实验日期:2017.9.22
实验人员:20162309邢天岳(结对同学20162313苑洪铭)
实验目的:学习和理解ArrayList和LinkedList,了解两种链表的别与联系,以及在分析数据时两种链表的优劣。使用Junit方法对两种链表进行测试,同时学习有序线性表的合并,对两个相同增减性的有序线性表进行泛型类的合并测试。
实验三、四分别要用数组和链表实现List,并进行测试。并总结线性结构。
指导老师:娄老师、王老师
实验具体过程:本次实验是学习有关线性结构的内容,共分为五个部分,分别从不同的方面考察对线性表、链表及数组的理解程度。实验1需要参考java API文档,分别满足ArrayList的相应功能,其中包括测试add、remove、isEmpty等功能进行测试,同时需要覆盖正常情况,异常情况,边界情况,并进行泛型测试。
API文档里存在相关代码可以很好的验证不同情况下ArrayList的功能。
实验2需要合并两个有序线性表,并且在合并前后的增减性不变。
我和结对伙伴所编写的代码使用的是while循环语句,在编译运行成功后,想要将其调整为for循环语句,但并没有调整成功,这里就需要辨析两种循环的差别,控制条件语句所控制的那个变量,在for循环结束后,就不能再被访问到了,而while循环结束还可以继续使用,如果你想继续使用,就用while,否则推荐使用for。原因是for循环结束,该变量就从内存中消失,能够提高内存的使用效率 ,由于在这个程序中,无法确定循环层数,则无法改变循环语句。同时在这个实验的git上传过程中再次出现了一个问题,通过命令行上传时的检测,文件名上传时需要与主类名一致。
实验3需要用数组来实现list的几个基本的方法为了能够快速实现方法,将装有Listt方法的BagInterface接口给实现,这里就应用到了泛型的知识点。在前次的实验中,我们测试了泛型的bag类,在这里可以参考以前的bag类方法。
方法如下:public boolean add(T newEntry) {
boolean a = false;
for (int i = 0;i < arry.length;i++){
if (arry[i] == null){
arry[i] = (Object) newEntry;
a = true;
break;
}
实验4和实验3有很多相似的地方,分别是用数组和链表进行实验,使用LinkedList可以获得更多的简便之处,但要分析好LinkedList的使用方法,LinkedList类是双向列表,列表中的每个节点都包含了对前一个和后一个元素的LinkedList的构造函数如下
- public LinkedList(): ——生成空的链表
- public LinkedList(Collection col): 复制构造函数
编写一个简单的程序来描述LinkedList的工作方法:
import java.util.LinkedList;
public class LinkedListTest{
public static void main(String[] args) {
LinkedListlList = new LinkedList ();
lList.add("1");
lList.add("2");
lList.add("3");
lList.add("4");
lList.add("5");
System.out.println("链表的第一个元素是 : " + lList.getFirst());
System.out.println("链表最后一个元素是 : " + lList.getLast());
}
}
这个程序可以获取链表的第一个和最后一个元素。除此之外,LinkedList还可以添加元素,添加单个元素 如果不指定索引的话,元素将被添加到链表的最后.public boolean add(Object element):
public boolean add(int index, Object element)
也可以把链表当初栈或者队列来处理:
public boolean addFirst(Object element)
public boolean addLast(Object element)
addLast()方法和不带索引的add()方法实现的效果一样.
LinkedList的私有方法:
本次实验是对线性表以及线性结构的学习和理解,同时也考察了泛型和java源代码,而对于java源代码,最大的特点就是简洁明了,用最少的代码来完成编译,极大地减少了出错的可能性,将方法进行拆分,又一个一个的小方法来组合成一个一个的程序。