国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

ArrayList與List對象用法與區別

2019-11-14 16:24:58
字體:
來源:轉載
供稿:網友

比如:

代碼如下 復制代碼
string[] s=new string[3];
//賦值
s[0]="a";
s[1]="b";
s[2]="c";
//修改
s[1]="b1";

但是,數組也存在一些不足的地方。比如在數組的兩個數據間插入數據也是很麻煩的。還有我們在聲明數組的時候,必須同時指明數組的長度,數組的長度過長,會造成內存浪費,數組和長度過短,會造成數據溢出的錯誤。這樣如果在聲明數組時我們并不清楚數組的長度,就變的很棘手了。
針對于數組的這些缺點,C#中最先提供了ArrayList對象來克服這些缺點。

ArrayList

ArrayList是.Net Framework提供的用于數據存儲和檢索的專用類,它是命名空間System.Collections下的一部分。它的大小是按照其中存儲的數據來動態擴充與收縮的。所以,我們在聲明ArrayList對象時并不需要指定它的長度。
ArrayList繼承了IList接口,所以它可以很方便的進行數據的添加,插入和移除.比如:

代碼如下 復制代碼

ArrayList list = new ArrayList();

//新增數據
list.Add("abc");
list.Add(123);
//修改數據
list[2] = 345;
//移除數據
list.RemoveAt(0);
//插入數據
list.Insert(0, "hello world");


獲取元素值

object value = al[index]; //al 為 ArrayList 對象,一般需要再對 value 進行類型轉換,比如:int n = (int)value;
設置元素值

al[index] = value; //al 為 ArrayList 對象,index 必須小于 Count
追加元素

int ArrayList.Add(object value) 返回添加的元素的索引
插入元素

void ArrayList.Insert(int index, object value)
刪除元素

刪除元素后,后面的元素會前移,但 Capacity 不會變化。

void ArrayList.Remove(object obj) 從前(索引 0)往后查找,刪除找到的第一個和 obj 相同的元素
void ArrayList.RemoveAt(int index) 刪除索引 index 對應的元素
void ArrayList.RemoveRange(int index, int count) 從索引 index 開始,刪除 count 個元素
查找元素

int ArrayList.IndexOf(object value) 從前(索引 0)往后查找,返回找到的第一個和 obj 相同的元素的索引
int ArrayList.IndexOf(object value, int startIndex)
int ArrayList.IndexOf(object value, int startIndex, int count)
int ArrayList.LastIndexOf(object value) 從后往前(索引 0)查找,返回找到的第一個和 obj 相同的元素的索引
int ArrayList.LastIndexOf(object value, int startInde(www.111cn.net)x)
int ArrayList.LastIndexOf(object value, int startIndex, int count)

從上面示例看,ArrayList好像是解決了數組中所有的缺點,那么它應該就是完美的了,為什么在C#2.0后又會出現List呢?
還是從上面的示例看,在list中,我們不僅插入了字符串"abc",而且又插入了數字123。這樣在ArrayList中插入不同類型的數據是允許的。因為ArrayList會把所有插入其中的數據都當作為object類型來處理。這樣,在我們使用ArrayList中的數據來處理問題的時候,很可能會報類型不匹配的錯誤,也就是說ArrayList不是類型安全的。既使我們保證在插入數據的時候都很小心,都有插入了同一類型的數據,但在使用的時候,我們也需要將它們轉化為對應的原類型來處理。這就存在了裝箱與拆箱的操作,會帶來很大的性能損耗。

穿插一下裝箱與拆箱的概念:

簡單的來講:

裝箱:就是將值類型的數據打包到引用類型的實例中
比如將int類型的值123賦給object對象o

代碼如下 復制代碼
int i=123;
object o=(object)i;
拆箱:就是從引用數據中提取值類型
比如將object對象o的值賦給int類型的變量i
object o=123;
int i=(int)o;

裝箱與拆箱的過程是很損耗性能的。

泛型List
正是因為ArrayList存在不安全類型與裝箱拆箱的缺點,所以在C#2.0后出現了泛型的概念。而List類是ArrayList類的泛型等效類。它的大部分用法都與ArrayList相似,因為List類也繼承了IList接口。最關鍵的區別在于,在聲明List集合時,我們同時需要為其聲明List集合內數據的對象類型。
比如:

代碼如下 復制代碼

List<int> list = new List<int>();
//新增數據
list.Add(123);
//修改數據
list[0] = 345;
//移除數據
list.RemoveAt(0);


上例中,如果我們往List集合中插入string字符"hello world",IDE就會報錯,且不能通過編譯。這樣就避免了前面講的類型安全問題與裝箱拆箱的性能問題了。

代碼如下 復制代碼

Console.WriteLine("List Test:");
//聲明一個整型的List
List<int> lsTest = new List<int>();
lsTest.Add(7);
lsTest.Add(5);
lsTest.Add(1);
lsTest.Add(3);
string strTest="";
//list的排序
lsTest.Sort();
//list的遍歷
foreach(int i in lsTest)
strTest+=i.ToString()+" ";
//格式化后輸出
Console.Write(string.Format("Out:{0} nCount:{1}n",strTest,lsTest.Count));
//讀取下一個按鍵,以便讓屏幕顯示數據
Console.ReadKey();

出結果如下

程序代碼

List Test:
Out:1 3 5 7
Count:4

from:http://www.111cn.net/net/160/48564.htm


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 瑞金市| 瑞丽市| 巴楚县| 彭阳县| 霍城县| 阿图什市| 育儿| 六盘水市| 阳原县| 隆化县| 卓资县| 乐昌市| 青川县| 红原县| 浏阳市| 综艺| 托里县| 崇明县| 丰原市| 东源县| 洮南市| 右玉县| 宣汉县| 雅江县| 喀喇| 保康县| 琼结县| 阿合奇县| 蓝田县| 东辽县| 榆树市| 许昌县| 关岭| 贵港市| 当阳市| 灵宝市| 广丰县| 商南县| 贵南县| 无棣县| 荥经县|