泛型之列表的建立和使用

2021-08-08 17:55:23 字數 2584 閱讀 2105

在前面,我們需要儲存很多態別一樣的資料的時候,我們一般都使用陣列來儲存並且管理,但是陣列有個缺點就是陣列的大小是固定的,那麼當我們不確定資料的個數的時候,該怎麼儲存呢?

我們可以使用集合類來進行儲存資料,列表list就是集合類的一種。我們可以使用列表很方便的新增、刪除資料以及其他的操作。

列表的建立

列表可以儲存任何型別的資料,在建立列表物件的時候,我們首先要指定要建立的這個物件要儲存什麼型別的(泛型)

建立列表的語法規則

//1.建立列表方法1

list

scorelist =

newlist

();new

list

();new

list

<

string

>();

//2.建立列表方法2

var scorelist =

newlist

();

這裡要說的是,為什麼列表可以儲存不指定數量的資料呢?

列表內部資料實際上是使用陣列進行的儲存,乙個空的列表內部會有乙個長度為0的陣列,當我們給列表新增元素的時候,列表的容量會擴大為4,如果再新增到第五個元素的時候,列表的大小會重新設定為8,以此類推,每次增加的容量為前一次的兩倍。

那麼列表的容量是怎麼增加的?

每當列表的容量不夠用的時候,它會建立乙個新的陣列,使用array.copy()方法將舊陣列的元素全部複製到新陣列中。但是為了節省時間,如果我們事先知道要儲存的個數,可以利用列表的建構函式指定容量的大小。

在這裡有個概念需要區分一下:

列表的兩種遍歷方式

用法和陣列一樣,不詳細描述

list list = new list();

list.add(12);

list.add(34);

list.add(56);

list.add(78);

list.add(90);

list.add(453);

list.add(342);

list.add(8976);

//for迴圈遍歷

for(int i = 0; i < list.count; i++)

console.writeline();

//foreach迴圈遍歷

foreach(int temp in list)

操作列表的屬性和方法

既然列表和陣列一樣能夠儲存資料,那麼也可以運算元據。這裡寫出一些比較常用的列表操作的方法,如果想要檢視列表其他的操作方法,可以在vs裡將游標移到list上按f12鍵。

capacity獲取容量大小

add()方法新增元素

insert()方法插入元素

[index]訪問元素

count屬性訪問元素個數

removeat()方法移除指定位置的元素

indexof()方法取得乙個元素所在列表中的索引位置;lastindexof()從後往前搜尋,搜尋到滿足條件的就停止,沒有找到返回-1

sort()方法對列表中的元素進行從小到大排序

下面用乙個隨機生成的列表來實現上面所說的操作

class program

foreach(int temp in list)

console.writeline();

console.writeline("獲取容量大小");

console.writeline(list.capacity);

//2.插入元素

list.insert(3, 1000);

console.writeline("插入元素'1000'後");

foreach (int temp in list)

console.writeline();

//3.訪問元素

console.writeline("訪問第5個元素");

console.writeline(list[4]);

//4.訪問元素個數

console.writeline("訪問元素個數");

console.writeline(list.count);

//5.移除指定位置元素

console.writeline("移除第5個元素");

list.removeat(4);

foreach (int temp in list)

console.writeline();

//6.取得插入元素的位置

console.writeline("取得插入元素的位置");

int index = list.indexof(1000);

console.writeline(index);

方法是從後往前搜尋

//7.對列表進行排序

console.writeline("對列表進行排序");

list.sort();

foreach (int temp in list)

console.readkey();

}}

泛型類的建立和使用

有些人問我 物件導向程式設計 oop 的承諾在 我的回答是應該從兩個方面來看oop 你所使用的oop和你建立的oop。如果我們簡單地看一下如 果沒有如例如microsoft的.net,borland的vcl,以及所有的第三方元件這樣的oo框架,那麼很多高階的應用程式幾乎就無法建立。所 以,我們可以說...

使用泛型來建立我們自己的列表

在前面我們知道在c 中有乙個list類,可以儲存長度不限的資料。列表是使用了泛型來建立的,那我們可以通過泛型來建立自己的乙個列表,這樣我們能夠對泛型和列表有個更深刻的了解。首先,我們知道列表其實就是乙個陣列,只不過構造的時候不需要指定長度,那麼我們首先要定義乙個泛型陣列和其中元素個數的變數。clas...

剖析C 2 0泛型類的建立和使用

c 中的泛型支援另外一些提煉。例如,乙個方法或類可以有多個引數化的型別並且c 泛型還支援where約束 它用來具體要求型別化引數的型別。例如,如果乙個泛型型別必須實現介面idisposable,那麼c 泛型是支援實現這一限制的。在文章的最後我們還要看一下約束問題。閒話少說,讓我們言歸正傳。using...