中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

編程開發中線性鏈表如何測試

發布時間:2021-12-07 10:32:28 來源:億速云 閱讀:149 作者:小新 欄目:編程語言

這篇文章主要介紹編程開發中線性鏈表如何測試,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

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

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類型時,代碼甚至連編譯器都不能通過!

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

以上是“編程開發中線性鏈表如何測試”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

梁河县| 叶城县| 洪湖市| 泾源县| 大安市| 盈江县| 平阴县| 凌云县| 贵州省| 南昌市| 八宿县| 新乡市| 隆安县| 山西省| 武义县| 荔波县| 赞皇县| 钦州市| 田东县| 革吉县| 舟曲县| 海城市| 石家庄市| 芮城县| 临海市| 太康县| 桐庐县| 东海县| 南阳市| 盐山县| 财经| 札达县| 汤阴县| 桃江县| 乐平市| 黔西| 威海市| 隆德县| 七台河市| 纳雍县| 桐庐县|