千家信息网

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

发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,这篇文章主要介绍编程开发中线性链表如何测试,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!我们可以添加一些整型值到进行线性链表测试:public void Run(){
千家信息网最后更新 2025年01月24日编程开发中线性链表如何测试

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

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

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类型时,代码甚至连编译器都不能通过!

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

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

类型 线性 安全 测试 代码 装箱 开发 编程 内容 实例 方法 时候 特性 篇文章 问题 工作 强制 不够 不好 从中 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 青岛跨境界互联网科技有限公司 杜比服务器dss200 互联网科技股2021 易管网打不开数据库是什么情况 青浦区市场软件开发收费标准 做软件开发需要具备什么 carsim软件开发公司 学习数据库必须要会开发语言吗 人渣服务器搭建多少钱 软件开发无形资产怎么核算 数据库连接最大连接数 wtc服务器连接失败的原因 手机要如何开我的世界服务器 软件开发人月费标准 《网络安全法》第59条规定 网络安全工业园 ssmc新加坡软件开发 2021年春秋杯网络安全联赛秋季赛 手机应用加载服务器配置失败 数据库技术的演化 可视化数字孪生软件开发 计算机网络技术能做黑客吗 杭州手机软件开发要多少钱 家庭教育和网络安全教育平台 怎么关闭服务器管理器自启 战舰世界亚服服务器怎么设置 科密a1数据库在哪里 安阳市委网络安全座谈会 怎么把数据库迁移到sole csgo怎么进日本服务器
0