筆記8 泛型、10個數組
泛型(特別好用)
例題引發的思考
泛型的寫法
1、在類名後面添加,表示我這個類裏面可以使用一種泛型(任意類型)。
通常用字母T。就好比for循環遍歷一般用i。
2、只要指定T的類型即可保存該類新。泛型的用法:多了一個<T的指定類型>。
//新創建一個類 Assets:資源
/*在類名(Assets)後面添加<T>,表示我這個類裏面可以使用一種泛型(任意類型)。
通常用字母T。就好比for循環遍歷一般用i。*/
public class Assets<T>
{
private T[] assets; //不用public是因爲我們要對它進行封裝
public Assets(int num)
{
//傳進來的num的意思是,我們要對這個數組初始化。
assets = new T[num];
//new一個T類型。因爲數組固定長度,所以要傳入數值
}
//外界想往上面數組添加信息
//這裏直接Set方法,傳入兩個參數:索引(index添加到第幾位上),T類型的數值(value)
public void SetAsset(int index, T value)
{
assets[index] = value;
}
} //此時就非常靈活了,只要指定T的類型即可。
class Program
{
static void Main(string[] args)
{
//泛型的用法:多了一個<T的指定類型>。此處是要保存字符串類型,所以填string
Assets<string> asset = new Assets<string>(4);
asset.SetAsset(0, "1"); //第0位數保存個字符串1
asset.SetAsset(1, "3");
asset.SetAsset(2, "10");
asset.SetAsset(3, "99");
//還可以保存整型,int
Assets<int> asset2 = new Assets<int>(2);
asset2.SetAsset(0, 1); //第0位數保存個整型1
asset2.SetAsset(1, 3);
}
}
泛型添加約束(where,很少寫)
10個數組
名稱空間
object、Object
第一種:可變數組(用的最多。 可變長度、效率低)
普通寫法(第1個)
內部
static void Main(string[] args)
{
//在外面寫,在此調用
ArrayListTest();
Console.ReadKey();
}
外面:static void ArrayListTest(){下面是此處的內容}
創建數組
//之前學的數組 固定長度、效率高
//int[] array = new int[32];
//1、數組(非常好用) 可變長度、效率低
ArrayList array = new ArrayList();
添加元素
//添加元素(可混加)
array.Add(9);
array.Add("8");
array.Add(7);
訪問並修改元素
array[0] = 7; //等號左邊表示訪問第1位,等號右邊表示將其賦值爲2
查看元素
//查看元素個數Count
Console.WriteLine(array.Count);
得到元素位置
//得到元素的位置
Console.WriteLine(array.IndexOf(7)); //會返回第一個7所在的索引
插入元素(有兩種方式)
//方式一:在指定位置插入元素
//字符串爲:7 "8" 7 。將元素6出啊入到數組0的位置上(“插隊”)
array.Insert(0,6);
打印指定位元素
Console.WriteLine(array[0]); //打印第0位元素
//方式二:批量插入
ArrayList array2 = new ArrayList(); //創建一個類新的數組
array.Add(4);
array.Add(5);
//插入一個範圍。此處表示:將array2裏所有的元素插入到數組0的位置上。也可以插入自身。
array.InsertRange(0,array2);
是否包含元素
//是否包含元素(很常用)
Console.WriteLine(array.Contains(3)); //Contains返回的是布爾值
刪除元素(四種方式)
array.Remove(7); //法一:刪除什麼元素
array.RemoveAt(0); //法二:刪除哪個索引的元素。
array.RemoveRange(0, 2); //法三:刪除從索引0開始的兩個元素
array.Clear(); //法四:全部刪除
泛型寫法(第2個)
泛型(List)。 能用List就不要用ArrayList,因爲泛型安全 。方法同上。
//此處只支持int類型
List<int> list = new List<int>();
list.Add(3);
Console.WriteLine(list[0]); //打印第0位
第二種:字典(無序)
普通寫法(又稱:哈希。第3個)
外面:static void HashTableTest(){下面是此處的內容}
創建HashTable
Hashtable table = new Hashtable();
添加鍵值對(兩種方法)
//法一
table.Add("id", "001"); //鑰匙"id"就可以開"001"這把鎖
table.Add("name", "小白");
table.Add("score", "25");
//法二
table["kongfu"] = "玄冥神掌";
輸入鑰匙,會得到鎖
Console.WriteLine(table["name"]);
//輸入鑰匙"name",會得到鎖,即結果:小白。
有些方法都是一樣的
//個數 table.Count
//清空 table.Clear();
是否包含(返回布爾值)
table.ContainsKey("name"); //是否包含Key
//table.Contains("name"); 同上,也是是否包含Key
table.ContainsValue("小白"); //是否包含Value
//除了像上面直接打印,也可以用布爾值接收
bool res = table.ContainsValue("001");
快速遍歷
//快速遍歷
/*“table.Keys”表示table下面有一個屬性Key,它返回的就是一個集合。
有兩個集合,一個是Keys,一個是Value。*/
foreach (string key in table.Keys)
{
Console.WriteLine(key); //遍歷Key
//遍歷Key的同時把Value打印出來
Console.WriteLine(key + " " + table[key]);
//結果顯示:對應關係對的,只是對與對的前後關係是亂的。
}
泛型寫法(又稱:字典.第4個)
創建泛型
Dictionary<int, string> dic = new Dictionary<int, string>();
dic.Add( 1,"333"); //添加鍵值對
取值(兩種方法)
法一:如果寫了個不存在鑰匙,程序會崩。但是,進而可以知道這裏錯了。(推薦使用)
Console.WriteLine(dic[1]);
//輸入鑰匙1,會得到鎖,即結果:333。
法二:如果寫了個不存在鑰匙,程序不會崩。但是,如果這裏錯了,不易察覺。
string value; //取得值是string類型,取value
bool res2 = dic.TryGetValue(1, out value);
//使用了out。當要修改value時,纔會填寫out。
//表示:我嘗試去取一下value的值。取出來就True,反之,False。好處:程序永遠不蹦。
第三種:隊列
存儲模式
泛型寫法(比普通常用。第5個)
外面:static void QueueTest(){下面是此處的內容}
創建泛型
Queue<int> queue = new Queue<int>();
添加元素(Enqueue)
//添加元素
queue.Enqueue(1);
queue.Enqueue(3);
取元素(兩種方法)
//法一:取出一個元素並且刪除。
Console.WriteLine(queue.Dequeue());
// 法二:取出一個元素不刪除。
Console.WriteLine(queue.Peek());
是否包含
queue.Contains(3); //是否包含3
元素個數
//元素個數
int num = queue.Count;
普通寫法(名字:普通、泛型一樣。第6個)
第四種:棧
泛型寫法(第7個)
外面:static void StaticTest(){下面是此處的內容}
創建一個泛型
Stack<int> stack = new Stack<int>();
添加元素(壓棧)
//壓棧:添加一個元素
stack.Push(1);
stack.Push(2);
stack.Push(3);
取元素(兩種方法)
//法一:取出元素並從棧中刪除(出棧)
Console.WriteLine(stack.Pop());
//法二:取出元素不刪除
Console.WriteLine(stack.Peek());
普通寫法(名字:普通、泛型一樣。第8個)
第9個:無序集合(只有泛型這一種寫法)
外面:static void SetTest(){下面是此處的內容}
創建泛型
HashSet<int> sets = new HashSet<int>();
添加元素
sets.Add(1);
sets.Add(2);
sets.Add(3);
sets.Add(4);
移除元素
//移除元素(與數組一樣:有移除)
sets.Remove(4);
查看個數
//查看個數。需要通過遍歷
int num = sets.Count;
foreach (int n in sets)
{
Console.WriteLine(n);
//雖說它的儲存是無序的,但遍歷時,可能還是按照順序出來
}
清除
sets.Clear(); //清除
第10個:數組(之前學過的)
數組是集合的一種。
定義:存儲了同一類型元素的元素集合。
特點:固定長度。
一維數組
聲明:類型[] 變量名
int[] itemId; //聲明瞭一個數組叫itemId,用來存放物品Id的。
創建數組(初始化)
int[] itemId =new int[10];
//等號左側是聲明(同上),右側是初始化了一個數組,只能放10個數。
賦值
inteId[0] = 1;
itemId[9] = 10; //賦值方法一:數組名稱[],[]裏面填寫數組的索引。從第0個數開始,不要越界。
int[] itemId = new int[3]{1, 2, 3};
//簡寫:(推薦寫法)
int[] itemId = new int[]{1, 2, 3};
//簡寫:
int[] itemId = {1, 2, 3};
例1:修改第0位的值爲4,並輸出。
int[] itemId = new int[] { 1,2,3 };
//等號左側,是一個叫itemId的數組,用來存放遊戲Id。等號右側,是初始化一個數組,容量爲3.
//將第0位的值改爲4
itemId[0] = 4;
//輸出第0位的值
Console.WriteLine(itemId[0]);
//爲了不讓程序退出
Console.ReadKey();
輸出數組長度
length:長度
itemId length:數組長度
例
//輸出數組長度
Console.WriteLine(itemId.Length);
二維數組
聲明:類型[,] 變量名及初始化
//聲明一個叫MapInfo(地圖信息)的二維數組,這個數組是3行4列。
int[,] MapInfo = new int[3, 4] {
{3,2,4,5},
{3,1,7,7},
{1,8,9,0}
};
int n = MapInfo[1, 2]; //取出第2行,第3列的值
//輸出n
Console.WriteLine(n);
//爲了不讓程序退出
Console.ReadKey();