189 8069 5689

编程开发中线性链表如何测试

这篇文章主要介绍编程开发中线性链表如何测试,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

成都创新互联专注于威海企业网站建设,成都响应式网站建设公司,商城网站建设。威海网站建设公司,为威海等地区提供建站服务。全流程定制设计,专业设计,全程项目跟踪,成都创新互联专业和态度为您提供的服务

我们可以添加一些整型值到进行线性链表测试:

public void Run(){      LinkedList ll = new LinkedList();      for ( int i = 0; i <  10; i ++ ){         ll.Add(i);      }       Console.WriteLine(ll);      Console.WriteLine("  Done. Adding employees...");  }

如果你对这段代码进行测试,它会如预计的那样工作:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9  Done. Adding employees...

然而,因为这是一个Object类型的集合,所以你同样可以将Employee类型添加到集合中。

ll.Add(new Employee("John"));  ll.Add(new Employee("Paul"));  ll.Add(new Employee("George"));  ll.Add(new Employee("Ringo"));   Console.WriteLine(ll);  Console.WriteLine("  Done.");

输出的结果证实了,整型值和Employee类型都被存储在了同一个集合中。

0, 1, 2, 3, 4, 5, 6, 7, 8, 9    Done. Adding employees...  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, John, Paul, George, Ringo  Done.

虽然看上去这样很方便,但是负面影响是,你失去了所有类型安全的特性。因为线性链表需要的是一个Object类型,每一个添加到集合中的整型值都被隐式装箱了,如同 IL 代码所示:

IL_000c:  box        [mscorlib]System.Int32  IL_0011:  callvirt   instance void ObjectLinkedList.LinkedList::Add(object)

同样,如果上面所说,当你从你的列表中取出项目的时候,这些整型必须被显式地拆箱(强制转换成整型),Employee类型必须被强制转换成 Employee类型。

Console.WriteLine("The fourth integer is " + Convert.ToInt32(ll[3]));  Employee d = (Employee) ll[11];  Console.WriteLine("The second Employee is " + d);

这些问题的解决方案是创建一个类型安全的集合。一个 Employee 线性链表将不能接受 Object 类型;它只接受 Employee类的实例(或者继承自Employee类的实例)。这样将会是类型安全的,并且不再需要类型转换。一个整型的线性链表,这个链表将不再需要装箱和拆箱的操作(因为它只能接受整型值)。

作为示例,你将创建一个 EmployeeNode,该结点知道它的data的类型是Employee。

public class EmployeeNode {      Employee employeedata;      EmployeeNode employeeNext;  }

Append 方法现在接受一个 EmployeeNode 类型的参数。你同样需要创建一个新的 EmployeeLinkedList ,这个链表接受一个新的 EmployeeNode:

public class EmployeeLinkedList{      EmployeeNode headNode = null;  }

EmployeeLinkedList.Add()方法不再接受一个 Object,而是接受一个Employee:

public void Add(Employee data){      if ( headNode == null ){         headNode = new EmployeeNode(data);}      else{         headNode.Append(new EmployeeNode(data));      }  }

类似的,索引器必须被修改成接受 EmployeeNode 类型,等等。这样确实解决了装箱、拆箱的问题,并且加入了类型安全的特性。你现在可以添加Employee(但不是整型)到你新的线性链表中了,并且当你从中取出Employee的时候,不再需要类型转换了。

EmployeeLinkedList employees = new EmployeeLinkedList();  employees.Add(new Employee("Stephen King"));  employees.Add(new Employee("James Joyce"));  employees.Add(new Employee("William Faulkner"));  /* employees.Add(5);  // try to add an integer - won't compile */ Console.WriteLine(employees);  Employee e = employees[1];  Console.WriteLine("The second Employee is " + e);

这样多好啊,当有一个整型试图隐式地转换到Employee类型时,代码甚至连编译器都不能通过!

但它不好的地方是:每次你需要创建一个类型安全的列表时,你都需要做很多的复制/粘贴 。一点也不够好,一点也没有代码重用。同时,如果你是这个类的作者,你甚至不能提前欲知这个链接列表所应该接受的类型是什么,所以,你不得不将添加类型安全这一机制的工作交给类的使用者---你的用户。

以上是“编程开发中线性链表如何测试”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!


分享文章:编程开发中线性链表如何测试
标题URL:http://cdxtjz.cn/article/igdiog.html

其他资讯