1.數組:元素序列,存放形同類型的變量,對象,每一項都有一個整數索引(下标);元素位于一個連續存儲的記憶體塊中;數組空間大小是固定的
數組分類:一維數組,多元數組(等于或大于二維)
聲明數組的格式(定義數組類型):
數組類型 [] 數組名稱;
執行個體化數組:
new 數組類型 [數組大小];
一般數組是作為一個整體進行執行個體化:
int[] array=new int [7];
數組初始化:
數值元素的數組的預設值是0,引用類型元素的數組的預設值是null,一般初始化作為一個整體進行
int [] array=new int [3]{1,2,3};
初始化文法格式如下:
資料類型[] 數組名=new 資料類型[數組大小]{初始值個數要等于數組大小};
資料類型[] 數組名=new 資料類型[]{初始值序列};
資料類型[] 數組名={初始值序列};
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 數組初始化問題
{
class Program
{
static void Main(string[] args)
{
int[] array0; //定義數組
int[] array = new int[7]; //建立執行個體也是作為一個整體進行
//不進行初始化,數組也能正常使用
int a = array.Length;
Console.WriteLine(a);
foreach (int b in array)
{
Console.WriteLine(b);
}
array[0] = 1;//正常指派
int[] array2 = new int[8] { 1, 2, 3, 45, 5, 6, 6, 6 }; //數組初始化也是作為一個整體初始化的,有三種初始化方法
//Array類中沒有Add()方法
}
}
}
匿名數組:
與匿名類型相似,用var關鍵字代替具體的資料類型,所引用的資料類型不需要預先定義
格式:
var 數組名=new [] {一定要有初始值};
eg:var array=new[]{1,2,3};
注意點:數組元素是相同類型,或是可以進行隐式轉換的類型,數組維數也由初始值決定
錯誤例子:
var array=new[]{1,3,“Monday”};
2.集合:也是資料容器,不同于數組,集合可以改變空間大小,不固定空間大小
集合分為泛型集合和非泛型集合:
泛型集合類 位于System.Collections.Generic;
非泛型集合類 位于System.Collections;
泛型集合:泛型是一種類型占位符,可以作為集合的資料類型指定
格式:
//List<T> 集合名=new List<T>();
List<String> b = new List<string>();
b.Add("a");
b.Add("b");
b.Add("c");
Console.WriteLine(b[1]);
b.RemoveAt(1);
Console.WriteLine(b[1]);
//會補位,可以動态改變空間大小的集合都有這種特征
非泛型集合(有四個類型):
ArrayList 數組集合類,類似于數組但可以随意更改空間大小,所有存儲在ArrayList對象裡的元素,其元素類型都會預設轉化為object類型,是以可以接受任何類型的資料,但是有裝箱操作,當使用ArrayList中的元素時,要進行拆箱操作,而且這拆箱操作不是自動實作,需要人為操作,而且造成性能損耗,費時費力,推薦使用泛型集合
ArrayList a = new ArrayList();
a.Add("a");
a.Add("b");
a.Add("c");
a.Remove("b");//會補位
string str = a[1].ToString();
foreach (string i in a)
{
Console.WriteLine(i);
}
//作為表達式不能單獨使用 a[0]
string sss = a[0].ToString();
Hashtable 哈希表,鍵/值對的集合,這些鍵/值對 可以跟據 鍵的哈希代碼進行組織(哈希表的做法其實很簡單,就是把Key通過一個固定的算法函數既所謂的哈希函數轉換成一個整型數字,然後就将該數字對數組長度進行取餘,取餘結果就當作數組的下标,将value存儲在以該數字為下标的數組空間裡。
而當使用哈希表進行查詢的時候,就是再次使用哈希函數将key轉換為對應的數組下标,并定位到該空間擷取value,如此一來,就可以充分利用到數組的定位性能進行資料定位)
Hashtable中key value鍵值對均為object類型
哈希表雖然與字典很相似,不過哈希表是有序,字典是無序
數組,集合 與 字典不同,數組,集合有序,字典無序
Hashtable tab = new Hashtable();
tab.Add("name", "Tom");
tab.Add("age", 10);
string name = tab["name"].ToString();
Queue 隊列,先進先出的特點,元素預設為object類型(裝箱)
Queue q = new Queue();
q.Enqueue(1);//入隊
q.Enqueue(2);
int number = (int)q.Dequeue();//出隊
foreach (int num in q)
{
Console.WriteLine(num);
}
Stack 堆棧,先進後出的特點,元素預設為objetct類型(裝箱)
Stack s = new Stack();
s.Push(1);//入棧
s.Push(2);
int n = (int)s.Pop();//出棧
Console.WriteLine(n);
foreach (int num in s)
{
Console.WriteLine(num);
}
無法用[] 索引通路隊列和堆棧
3.字元串:字元的有序集合,字元是指符合Unicode編碼的字元;C#中string是指向.Net Framework的基類System.String,String類專門處理字元串的類庫,string是String類的别名(int,char…)
String對象是System.Char對象的數組
string s = "Hello World";
char c = s[1];
String對象不可變是指一般情況下,我們将“一經指派,其值就不能被更改”視為不變性,字元串一經指派,其值就不能被更改。看來似乎修改了String對象實際上傳回了一個包含修改内容的新String對象
StringBuilder類
動态字元串,可以StringBuilder類建立的對象上對字元串進行更改