成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

線性鏈表測試方法簡介

開發 后端
本文簡要介紹了一下線性鏈表的測試方法,希望對大家有所幫助。

我們可以添加一些整型值到進行線性鏈表測試:

  1. public void Run(){  
  2.     LinkedList ll = new LinkedList();  
  3.     for ( int i = 0; i <  10; i ++ ){  
  4.        ll.Add(i);  
  5.     }  
  6.  
  7.     Console.WriteLine(ll);  
  8.     Console.WriteLine("  Done. Adding employees...");  
  9. }  

如果你對這段代碼進行測試,它會如預計的那樣工作:

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

然而,因為這是一個Object類型的集合,所以你同樣可以將Employee類型添加到集合中。

  1. ll.Add(new Employee("John"));  
  2. ll.Add(new Employee("Paul"));  
  3. ll.Add(new Employee("George"));  
  4. ll.Add(new Employee("Ringo"));  
  5.  
  6. Console.WriteLine(ll);  
  7. Console.WriteLine("  Done."); 

輸出的結果證實了,整型值和Employee類型都被存儲在了同一個集合中。

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

雖然看上去這樣很方便,但是負面影響是,你失去了所有類型安全的特性。因為線性鏈表需要的是一個Object類型,每一個添加到集合中的整型值都被隱式裝箱了,如同 IL 代碼所示:

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

同樣,如果上面所說,當你從你的列表中取出項目的時候,這些整型必須被顯式地拆箱(強制轉換成整型),Employee類型必須被強制轉換成 Employee類型。

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

這些問題的解決方案是創建一個類型安全的集合。一個 Employee 線性鏈表將不能接受 Object 類型;它只接受 Employee類的實例(或者繼承自Employee類的實例)。這樣將會是類型安全的,并且不再需要類型轉換。一個整型的線性鏈表,這個鏈表將不再需要裝箱和拆箱的操作(因為它只能接受整型值)。

作為示例,你將創建一個 EmployeeNode,該結點知道它的data的類型是Employee。

  1. public class EmployeeNode {  
  2.     Employee employeedata;  
  3.     EmployeeNode employeeNext;  

Append 方法現在接受一個 EmployeeNode 類型的參數。你同樣需要創建一個新的 EmployeeLinkedList ,這個鏈表接受一個新的 EmployeeNode:

  1. public class EmployeeLinkedList{  
  2.     EmployeeNode headNode = null;  

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

  1. public void Add(Employee data){  
  2.     if ( headNode == null ){  
  3.        headNode = new EmployeeNode(data);}  
  4.     else{  
  5.        headNode.Append(new EmployeeNode(data));  
  6.     }  

類似的,索引器必須被修改成接受 EmployeeNode 類型,等等。這樣確實解決了裝箱、拆箱的問題,并且加入了類型安全的特性。你現在可以添加Employee(但不是整型)到你新的線性鏈表中了,并且當你從中取出Employee的時候,不再需要類型轉換了。

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

這樣多好啊,當有一個整型試圖隱式地轉換到Employee類型時,代碼甚至連編譯器都不能通過!

但它不好的地方是:每次你需要創建一個類型安全的列表時,你都需要做很多的復制/粘貼 。一點也不夠好,一點也沒有代碼重用。同時,如果你是這個類的作者,你甚至不能提前欲知這個鏈接列表所應該接受的類型是什么,所以,你不得不將添加類型安全這一機制的工作交給類的使用者---你的用戶。

這樣,線性鏈表測試就完成了。

【編輯推薦】

  1. C# winForm自定義鼠標樣式的兩種方法
  2. C#自定義消息框的設置圖解
  3. 掌握C#自定義泛型類:從初始化說起
  4. C#存儲過程的循序漸進
  5. 存儲過程的優勢及其調用方法介紹
責任編輯:book05 來源: csdn
相關推薦

2009-02-09 09:51:00

網絡故障測試調試

2021-05-12 14:09:35

鏈表數據結構線性結構

2009-06-19 16:26:51

JUnit測試骨架

2011-03-30 16:54:13

JUnit

2009-08-19 04:14:00

線性鏈表

2021-01-06 05:31:13

線性表鏈表數據

2010-06-03 09:13:35

2010-04-13 10:49:32

2010-12-17 10:07:55

2009-12-14 16:44:56

Ruby調用DLL

2009-08-25 17:07:27

C#虛擬方法

2010-04-13 10:54:33

MPLS

2010-03-10 10:55:14

2009-12-23 17:57:22

WPF默認模板

2017-08-18 14:01:44

大數據dataWrangle

2011-04-08 10:43:44

2010-01-28 11:07:59

Android NDK

2013-05-03 11:37:16

結構化布線布線技術布線系統

2011-05-16 16:52:09

單元測試徹底測試

2010-03-12 14:04:32

Python入門教程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩美av | 国产7777| 毛片99| 成人在线视频网 | 99成人| 精品国产乱码久久久久久丨区2区 | 黄色三级在线播放 | 在线欧美a | 国产欧美精品 | 色资源站 | 盗摄精品av一区二区三区 | 国产乱码精品一区二区三区中文 | 97色在线观看免费视频 | 亚洲精品乱 | 日本天天色 | 欧美午夜一区二区三区免费大片 | 91观看| 免费亚洲视频 | 91久久久久久久久久久久久 | 久久久久中文字幕 | 不卡一区二区在线观看 | 欧美一级淫片免费视频黄 | 久久国产欧美日韩精品 | 国产精品久久久久一区二区三区 | 成av在线 | 国产精品视频久久 | 美女久久| 国产精品久久欧美久久一区 | 色综合久| 久久久久亚洲精品 | 欧美日韩黄色一级片 | 久久tv在线观看 | 亚洲一区中文字幕 | 成人av在线大片 | 欧美成人免费在线 | 99精品在线观看 | a视频在线观看 | 亚洲二区精品 | 欧美日韩在线免费观看 | 久久久久久久久久久久久久av | 国产精品黄视频 |