在前面我們知道在c#中有乙個list類,可以儲存長度不限的資料。列表是使用了泛型來建立的,那我們可以通過泛型來建立自己的乙個列表,這樣我們能夠對泛型和列表有個更深刻的了解。
首先,我們知道列表其實就是乙個陣列,只不過構造的時候不需要指定長度,那麼我們首先要定義乙個泛型陣列和其中元素個數的變數。
class mylistwhere t:icomparable
有了mylist這個類之後,我們要去定義他的建構函式,陣列長度可填可不填。
//構造有引數組
public
mylist(int size)
}//構造無引數組
public
mylist()
這樣我們的列表就可以通過建構函式構造出來了,那麼列表的基本屬性是什麼呢?我們要能夠獲取這個列表的容量大小和元素個數。因為容量大小和元素個數我們只需要獲取它的數值,所以不用設定set方法。
//獲取容量大小
public
int capacity
}//獲取陣列內元素個數
public
int count
}
現在這個列表的建構函式和屬性都已經寫好了,那麼接下來我們需要寫這個列表的功能。功能如下
1.add()方法新增元素
//新增元素
public void add(t item)
else
}array[count] = item;
count++;
}
2.獲取列表的值(為了更方便地訪問列表,我們可以使用索引器訪問元素)
//獲取列表的值
public t getitem(int
index)
else
}//通過索引訪問元素
public t this[int
index] //從原始碼所獲取的方法
setelse
}}
3.插入元素
public
void insert(int
index, t item)
else
}else
array[index] = item;
count++; //插入完之後元素個數自增}}
else
}
4.移除指定位置元素
public
void removeat(int
index)
count--;
}else
}
5.從前往後取得元素在列表中的索引
//從前往後取得元素在列表中的索引
public
intindexof(t item)
}return -1;
}
6.從後往前取得元素在列表中的索引
//從後往前取得元素在列表中的索引
public
intlastindexof(t item)
}return -1;
}
7.對列表中的元素進行排序(氣泡排序)
public
void sort()}}
}
在這些功能裡,有些地方值得注意一下
使用泛型宣告的元素,當判斷是否相等的時候,不能使用」==」來判斷,只能使用equals()方法來判斷是否相等。
使用泛型宣告的元素,當判斷兩者的大小時,不能使用」>」或」<」來判斷,我們需要在類名後面加上」where t:icompareble」,給泛型繼承icompareble介面,然後使用compareto()方法,當比較完的值》0時,說明前面那個數比後面的數大,<0時說明前面的數比後面的數小。
下面貼出源**
class mylistwhere t:icomparable
}//構造無引數組
public
mylist()
//獲取容量大小
public
int capacity
}//獲取陣列內元素個數
public
int count
}//新增元素
public
void
add(t item)
else
}array[count] = item;
count++;
}//獲取列表的值
public t getitem(int index)
else
}//通過索引訪問元素
public t this[int index] //從原始碼所獲取的方法
setelse}}
//插入元素
public
void
insert(int index, t item)
else
}else
array[index] = item;
count++; //插入完之後元素個數自增}}
else
}//移除指定位置元素
public
void
removeat(int index)
count--;
}else
}//從前往後取得元素在列表中的索引
public
intindexof(t item)
}return -1;
}//從後往前取得元素在列表中的索引
public
intlastindexof(t item)
}return -1;
}//對列表中的元素進行排序(氣泡排序)
public
void
sort()}}
}}
//主函式
class program
console.writeline();
console.writeline(mylist.indexof(83));
console.writeline(mylist.lastindexof(18));
console.writeline();
mylist.sort();
for (int i = 0; i < mylist.count; i++)
console.readkey();
}}
泛型之列表的建立和使用
在前面,我們需要儲存很多態別一樣的資料的時候,我們一般都使用陣列來儲存並且管理,但是陣列有個缺點就是陣列的大小是固定的,那麼當我們不確定資料的個數的時候,該怎麼儲存呢?我們可以使用集合類來進行儲存資料,列表list就是集合類的一種。我們可以使用列表很方便的新增 刪除資料以及其他的操作。列表的建立 列...
非泛型列表到泛型列表的轉換
長夜漫漫,無心睡眠.剛剛在寫一段 用nhibernate從資料庫中讀取一組資料.我第一次使用了泛型的ilist.感覺不錯,只是稍微有一點問題,因為現在的nhibernate 1.0.2 還不支援泛型.所有在從criteria中取道資料後,還必須進行一次翻譯才能返回到ilist中.我寫的 如下 ili...
泛型類的建立和使用
有些人問我 物件導向程式設計 oop 的承諾在 我的回答是應該從兩個方面來看oop 你所使用的oop和你建立的oop。如果我們簡單地看一下如 果沒有如例如microsoft的.net,borland的vcl,以及所有的第三方元件這樣的oo框架,那麼很多高階的應用程式幾乎就無法建立。所 以,我們可以說...