1.ArrayList
1.ArrayList的本質
ArrayList是一個C#為我們封裝好的類
它的本質是一個object類型的數組
ArrayList類幫助我們實作了很多方法
比如數組的增删查改
2.申明
需要引用命名空間 using System.Collections;
ArrayList array = new ArrayList();
3.增删查改
1.增
array.Add(1);
array.Add("123");
array.Add(true);
array.Add(new object());
array.Add(new Test());
array.Add(1);
array.Add(true);
ArrayList array2 = new ArrayList();
array2.Add(123);
//範圍增加 (批量增加 把另一個list容器裡面的内容加到後面)
array.AddRange(array2);
//插入元素 (位置,插入内容)
array.Insert(1, "123456");
Console.WriteLine(array[1]);//123456
2.删
//移除指定元素 從頭找 找到就删
array.Remove(1);
//移除指定位置的元素
array.RemoveAt(2);
//清空
//array.Clear();
3.查
//得到指定位置的元素
Console.WriteLine(array[0]);
//檢視元素是否存在
if (array.Contains("123"))
{
Console.WriteLine("存在123");
}
//正向查找元素位置
//找到的傳回值 是位置 找不到 傳回值就是-1
int index = array.IndexOf(true);
Console.WriteLine(index);//1
index = array.IndexOf(false);
Console.WriteLine(index);//-1
//反向查找元素位置
//傳回是從頭開始的索引數
index = array.LastIndexOf(true);
Console.WriteLine(index);//4
4.改
Console.WriteLine(array[0]);
array[0] = "999";
Console.WriteLine(array[0]);
5.周遊
//長度
Console.WriteLine(array.Count);//7
//容量
//避免産生過多的垃圾
Console.WriteLine(array.Capacity);//16
Console.WriteLine("*******************");
for (int i = 0; i < array.Count; i++)
{
Console.Write(array[i]);
}
Console.WriteLine("");
//疊代器周遊
foreach (object item in array)
{
Console.Write(item);
}
4.裝箱拆箱
ArrayList本質上是一個可以自動擴容的object數組
由于用萬物之父來存儲資料,自然存在裝箱拆箱
當往其中進行值類型存儲時就是在裝箱,當将值類型對象取出來轉換使用時,就是在拆箱
是以ArrayList盡量少用,之後我們會學習更好的資料容器
int k = 1;
array[0] = k;//裝箱
k = (int)array[0];//拆箱
2.Stack
1.Stack的本質
Stack(棧)是一個C#為我們封裝好的類
它的本質也是object[]數組,隻是封裝了特殊的存儲規則
Stack是棧存儲容器,棧是一種先進後出的資料結構
先存入的資料後擷取,後存入的資料先擷取
棧是先進後出
2.申明
需要引用命名空間 using System.Collections;
Stack stack = new Stack();
3.增取查改
1.增
//壓棧
stack.Push(1);
stack.Push("123");
stack.Push(true);
stack.Push(1.2f);
stack.Push(new Test());
2.取
//棧中不存在删除的概念
//隻有取的概念
//彈棧
object v = stack.Pop();
Console.WriteLine(v);
v = stack.Pop();
Console.WriteLine(v);//1.2f
3.查
//1.棧無法檢視指定位置的 元素
// 隻能檢視棧頂的内容
v = stack.Peek();//隻檢視,不取出
Console.WriteLine(v);
Console.WriteLine(v);
//2.檢視元素是否存在于棧中
if (stack.Contains(1.2f))
{
Console.WriteLine("存在1.2f");
}
//無輸出
if (stack.Contains("123"))
{
Console.WriteLine("存在123");
}
//存在123
4.改
//棧無法改變其中的元素 隻能壓(存)和彈(取)
//實在要改 隻有清空
stack.Clear();
Console.WriteLine(stack.Count);//0
stack.Push("1");
stack.Push(2);
stack.Push("哈哈哈");
5.周遊
//1.長度
Console.WriteLine(stack.Count);//3
//2.用foreach周遊
// 而且周遊出來的順序 也是從棧頂到棧底
foreach (object item in stack)
{
Console.WriteLine(item);
}
//3.還有一種周遊方式
// 将棧轉換為object數組
// 周遊出來的順序 也是從棧頂到棧底
object[] array = stack.ToArray();
for (int i = 0; i < array.Length; i++)
{
Console.WriteLine(array[i]);
}
//4.循環彈棧
while (stack.Count > 0)
{
/*object o = stack.Pop();
Console.WriteLine(o);*/
Console.WriteLine(stack.Pop());
}
Console.WriteLine(stack.Count);
4.裝箱拆箱
由于用萬物之父來存儲資料,自然存在裝箱拆箱
當往其中進行值類型存儲時就是在裝箱
當将值類型對象取出來轉換使用時,就存在拆箱
3.Queue
1.Queue本質
Queue是一個C#為我們封裝好的類
它的本質也是object[]數組,隻是封裝了特殊的存儲規則
Queue是隊列存儲容器
隊列是一種先進先出的資料結構
先存入的資料先擷取,後存入的資料後擷取
2.申明
需要引用命名空間 using System.Collections;
Queue queue = new Queue();
3.增取查改
1.增
queue.Enqueue(1);
queue.Enqueue("123");
queue.Enqueue(1.4f);
queue.Enqueue(new Test());
2.取
//隊列中不存在删除概念
//隻有取的概念 取出先加入的對象
object v = queue.Dequeue();
Console.WriteLine(v);//1
v = queue.Dequeue();
Console.WriteLine(v);//123
3.查
//1.檢視隊列頭部元素但不會移除
v = queue.Peek();
Console.WriteLine(v);//1.4
v = queue.Peek();
Console.WriteLine(v);//1.4
//2.檢視元素是否存在于隊列中
if (queue.Contains(1.4f))
{
Console.WriteLine("隊列中存在1.4f");
}
4.改
//隊列無法改變其中的元素 隻能進出隊列
//實在要改 隻有清空
Console.WriteLine(queue.Count);//2
queue.Clear();
queue.Enqueue(1);
queue.Enqueue(2);
queue.Enqueue(3);
5.周遊
//1.長度
Console.WriteLine(queue.Count);//3
//2.用foreach周遊
foreach (object item in queue)
{
Console.WriteLine(item);
}
//3.還有一種周遊方式
// 将隊列轉換為object數組
object[] array = queue.ToArray();
for (int i = 0; i < queue.Count; i++)
{
Console.WriteLine(array[i]);
}
//4.循環出列
while (queue.Count > 0)
{
Console.WriteLine(queue.Dequeue());
}
4.裝箱拆箱
由于用萬物之父來存儲資料,自然存在裝箱拆箱
當往其中進行值類型存儲時就是在裝箱
當将值類型對象取出來轉換使用時,就存在拆箱
4.Hashtable
1.Hashtable的本質
Hashtable(又稱散清單)是基于鍵的哈希代碼組織起來的 鍵/值對
它的主要作用是提高資料查詢的效率
使用鍵來通路集合中的元素
2.申明
需要引用命名空間 using System.Collections;
Hashtable hashtable = new Hashtable();
3.增删查改
1.增
hashtable.Add(1, "123");
hashtable.Add("123", 1);
hashtable.Add(true, false);
hashtable.Add(false, false);
//注意:不能出現相同鍵
2.删
//1.隻能通過鍵去删除
hashtable.Remove(1);
//2.删除不存在的鍵 沒反應
hashtable.Remove(2);
//3.或者直接清空
hashtable.Clear();
hashtable.Add(1, "123");
hashtable.Add(2, "1234");
hashtable.Add(3, "123");
hashtable.Add("123123", 12);
3.查
//1.通過鍵檢視值
// 找不到會傳回空
Console.WriteLine(hashtable[1]);//123
Console.WriteLine(hashtable[4]);//傳回空
Console.WriteLine(hashtable["123123"]);//12
//2.檢視是否存在
// 根據鍵檢測
if (hashtable.Contains(2))
{
Console.WriteLine("存在鍵為2的鍵值對");
}
if (hashtable.ContainsKey(2))
{
Console.WriteLine("存在鍵為2的鍵值對");
}
// 根據值去檢測
if (hashtable.ContainsValue(12))
{
Console.WriteLine("存在值為12的鍵值對");
}
4.改
//隻能改 鍵對應的值内容 無法修改鍵
Console.WriteLine(hashtable[1]);
hashtable[1] = 100.5f;
Console.WriteLine(hashtable[1]);
5.周遊
//得到鍵值對 對數
Console.WriteLine(hashtable.Count);
//1.周遊所有鍵
foreach (object item in hashtable.Keys)
{
Console.WriteLine("鍵:"+item);
Console.WriteLine("值:" + hashtable[item]);
}
Console.WriteLine();
//2.周遊所有值
foreach (object item in hashtable.Values)
{
Console.WriteLine("值:"+item);
}
//3.鍵值對一起周遊
foreach (DictionaryEntry item in hashtable)
{
Console.WriteLine("鍵:" + item.Key + " 值:" + item.Value);
}
//4.疊代器周遊法
IDictionaryEnumerator myEnumerator = hashtable.GetEnumerator();
bool flag = myEnumerator.MoveNext();
while (flag)
{
Console.WriteLine("鍵:" + myEnumerator.Key + " 值:" + myEnumerator.Value);
flag = myEnumerator.MoveNext();
}
4.裝箱拆箱
由于用萬物之父來存儲資料,自然存在裝箱拆箱
當往其中進行值類型存儲時就是在裝箱
當将值類型對象取出來轉換使用時,就存在拆箱