using System;
using System.Collections.Generic;using System.Linq;using System.Text;using System.Collections;namespace MyArrayList_hjf
{ class MyArrayList : IEnumerable { object[] objarr = new object[0]; int count; public MyArrayList() {}
public MyArrayList(int capacity) { this.Capacity = capacity; } /// <summary> /// 索引器 /// </summary> /// <param name="index">索引值</param> /// <returns></returns> public object this[int index] { get { if (index > count) { throw new Exception("索引超出范围"); } else { if (index > count) { throw new Exception("索引超出范围"); } else { return objarr[index]; } } } set { if (index < count) { objarr[index] = value; } else { throw new Exception("索引超出范围"); } } } /// <summary> /// 获取数组的长度 /// </summary> public int Count { get { return count; } } /// <summary> /// 获取或设置数组的容量 /// </summary> public int Capacity { get { return objarr.Length; } set { if (value < count) { throw new Exception("容量小于元素个数"); } else { object[] temparr = new object[value]; for (int i = 0; i < count; i++) { temparr[i] = objarr[i]; } objarr = temparr; } } } /// <summary> /// 添加数组元素 /// </summary> /// <param name="value">要添加的值</param> /// <returns></returns> public int Add(object value) { if (objarr.Length == 0) { objarr = new object[4]; objarr[0] = value; count++; return 0; } else { if (Count < objarr.Length) { objarr[count] = value; count++; return count - 1; } else { object[] tempObj = new object[objarr.Length * 2]; for (int i = 0; i < count; i++) { tempObj[i] = objarr[i]; } tempObj[count] = value; count++; objarr = tempObj; return count - 1; } } } /// <summary> /// 移除指定项的第一个匹配元素 /// </summary> /// <param name="obj">要移除的对象</param> public void Remove(object obj) { int num = -1; for (int i = 0; i < count; i++) { if (objarr[i].Equals(obj)) { num = i; break; } } if (num != -1) { for (int j = num; j < count; j++) { objarr[j] = objarr[j + 1]; } count--; } } /// <summary> /// 用于foreach循环 /// </summary> /// <returns></returns> public IEnumerator GetEnumerator() { for (int i = 0; i < count; i++) { yield return objarr[i]; } } /// <summary> /// 移除数组中所有元素 /// </summary> public void Clear() { for (int i = 0; i < count; i++) { objarr[i] = null; } count = 0; } /// <summary> /// 把数组中所有元素反转 /// </summary> public void Reverse() { object[] tempArr = new object[count]; int num = 0; for (int i = count - 1; i >= 0; i--) { tempArr[num] = objarr[i]; num++; } objarr = tempArr; } /// <summary> /// 确定某元素是否存在与该数组中 /// </summary> /// <param name="item">要在数组中查找的对象,该对象可以为null</param> /// <returns></returns> public bool Contains(object item) { bool mark = false; foreach (object o in objarr) { if (o.Equals(item)) { mark = true; break; } } return mark; } /// <summary> /// 移除指定索引处的元素 /// </summary> /// <param name="index">index:要移除的元素的从0开始的索引</param> public void RemoveAt(int index) { if (index < 0 || index > count) { throw new Exception("索引超出范围,必须为非负值并小于集合大小。"); } else { for (int i = index; i < count; i++) { objarr[i] = objarr[i + 1]; } count--; } } /// <summary> /// 将元素插入到指定的索引处 /// </summary> /// <param name="index">index:从0开始的索引,应该在该位置插入value</param> /// <param name="value">要插入的值,该值可以为null</param> public void Insert(int index, object value) { ArrayList al = new ArrayList(); if (index < 0 || index > count) { throw new Exception("插入索引已超出范围,必须为非负值,并且小于或等于集合大小。"); } else { //如果数组长度小于集合容量 if (count < Capacity) { if (index < count) { for (int i = count - 1; i >= index; i--) { objarr[i + 1] = objarr[i]; } objarr[index] = value; count++; } else if (index == count) { objarr[index] = value; count++; } } else if (count == Capacity) { object[] tempArr = new object[objarr.Length * 2]; for (int j = 0; j < count;j++ ) { tempArr[j]=objarr[j]; } objarr = tempArr; if (index < count) { for (int i = count - 1; i >= index; i--) { objarr[i + 1] = objarr[i]; } objarr[index] = value; count++; } else if (index == count) { objarr[index] = value; count++; } } } } }}