小弟初写博文,深感“易敲千行码,难下百余文”的道理。
内容粗略浅薄,望各位大神海涵!
- 数组是包含若干相同类型变量,这些变量都可以通过索引进行访问。它在内存中是一串连续的空间,所以长度一旦确定就不能再修改。
//声明一个长度为6的数组 int [] arr = new int [6];
- 动态数组是包含若干object类型变量,变量也可以通过索引访问。但是它的长度可以动态增长,可以通过Add()方法添加元素,Remove()方法删除元素,通过Count属性遍历元素,等等。
//新建一个动态数组 ArrayList arr = new ArrayList(); arr.Add("1"); //加元素 arr.Add("2"); arr.Add("3"); arr.Add("4"); arr.Add("5"); arr.RemoveAt(4); //删元素 //for遍历 for (int i = 0; i < arr.Count; i++) { Console.WriteLine(arr[i]); } Console.ReadKey();
- 可以新建一个类,包含一个string类型数组,封装一些属性和方法来实现类似ArrayList的功能。
class MyArrayList {
//创建一个长度为4的数组
string[] strs=new string[4]; int count; /// <summary> /// 元素个数 /// </summary> public int Count { get { return count; } //set { count = value; } } /// <summary> /// 添加元素 /// </summary> /// <param name="item"></param> public void Add(string item) { //判断数组是否需要扩容 if(count==strs.Length) { //数组需要重新创建,创建一个长度为原数组的2倍的数组
string [] newstrs=new string[strs.Length*2]; //将原始数组的数据复制到新数组中 strs.CopyTo(newstrs, 0); //将旧数组的引用重新指定 strs = newstrs; } strs[count] = item; //存储元素 count++; //元素个数加1
} /// <summary> /// 删除元素 /// </summary> /// <param name="index">需要删除的索引</param> public void RemoveAt(int index) { Array.Copy(strs, index + 1, strs, index, this.Count - 1 - index);
strs[count-1] = null;
this.count--;
} /// <summary> /// 索引器 /// </summary> /// <param name="index"></param> /// <returns></returns> public string this[int index] { get { if (index < 0 || index >= this.Count) { throw new ArgumentOutOfRangeException("索引越界了啦"); } return strs[index]; } set { if (index < 0 || index >= this.Count) { throw new ArgumentOutOfRangeException("索引越界了啦"); } strs[index] = value; } }
- 创建一个MyArrayList的string集合,可以实现ArrayList的功能
//新建一个MyArrayList集合 MyArrayList my = new MyArrayList(); my.Add("1"); //添加元素 my.Add("2"); my.Add("3"); my.Add("4"); my.Add("5"); my.RemoveAt(4); //删除元素 //for遍历 for (int i = 0; i < my.Count; i++) { Console.WriteLine(my[i]); } Console.ReadKey();
- ArrayList动态数组没有指定类型,它包含的是object类数组,那么我们只要把MyArrayList类包含的string [] 改成object[],就更类似ArrayList,当然ArrayList还包含很多其他的功能方法,这里就不一一描述了。