码迷,mamicode.com
首页 > 其他好文 > 详细

01.线性表 ArrayList

时间:2016-04-05 13:58:46      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:

技术分享
  1   public class MyArrayList
  2     {
  3         //容量
  4         private const int _defaultCapacity = 4;
  5         //存放数组元素
  6         private object[] _items;
  7         //数组大小
  8         private int _size;
  9         //元素个数为0的数组状态
 10         private static readonly object[] emptyArray = new object[0];
 11 
 12         public MyArrayList()
 13         {
 14             this._items = emptyArray;
 15         }
 16 
 17         public MyArrayList( int capacity)
 18         {
 19             if (capacity<0)
 20             {
 21                 throw new ArgumentOutOfRangeException("capacity","ArrayList的容量不可为负数!");
 22             }
 23             this._items = new object[capacity];
 24         }
 25 
 26         //索引器
 27         public virtual object this[int index]
 28         {
 29             get 
 30             {
 31                 if (index<0||index>=this._size)
 32                 {
 33                     throw new ArgumentOutOfRangeException("index","索引超出范围!");
 34                 }
 35                 return this._items[index];
 36             }
 37 
 38             set 
 39             {
 40                 if (index < 0 || index >= this._size)
 41                 {
 42                     throw new ArgumentOutOfRangeException("index", "索引超出范围!");
 43                 }
 44                 this._items[index] = value;
 45             }
 46 
 47         }
 48 
 49         //当前数组元素个数
 50         public virtual int Count
 51         {
 52             get {return this._size ;}
 53         }
 54 
 55         //数组的容量
 56         public virtual int Capacity
 57         {
 58             get { return this._items.Length; }
 59             set 
 60             {
 61                 if (value!=this._items.Length)
 62                 {
 63                     if (value<this._size)
 64                     {
 65                         throw new ArgumentOutOfRangeException("value","容量太小");
 66                     }
 67                     if (value > 0)
 68                     {//开辟新内存空间存储元素
 69                         object[] dest = new object[value];
 70                         if (this._size > 0)
 71                         {//搬动元素
 72                             Array.Copy(this._items, 0, dest, 0, this._size);
 73                         }
 74                         this._items = dest;
 75                     }
 76                     else//数组最小的空间为4
 77                     {
 78                         this._items=new object[_defaultCapacity]; 
 79                     } 
 80                 }
 81             }
 82         }
 83 
 84         //元素的添加
 85         public virtual int Add(object value)
 86         {//当空间已满
 87             if (this._size==this._items.Length)
 88             {
 89                 this.EnsureCapacity(this._size+1);
 90             }
 91             this._items[this._size] = value;
 92             return this._size++;
 93         }
 94 
 95         //扩容
 96         private void EnsureCapacity(int p)
 97         {
 98             if (this._items.Length<p)
 99             {//空间加倍
100                 int num = (this._items.Length == 0) ? _defaultCapacity : (this._items.Length * 2);
101                 if (num < p)
102                 {
103                     num = p;
104                 }
105                 this.Capacity = num;
106             } 
107         }
108 
109         //指定位置插入元素
110         public virtual void Insert( int index,object value)
111         {
112             if (index<0||index>this._size)
113             {
114                 throw new ArgumentOutOfRangeException("index","索引超出范围!");
115             }
116             if (this._size==this._items.Length)
117             {
118                 this.EnsureCapacity(this._size + 1);
119             }
120             if (index<this._size)
121             {
122                 Array.Copy(this._items, index, this._items, index + 1, this._size - index);
123             }
124             this._items[index] = value;
125             this._size++;
126         } 
127 
128         //移除指定索引的元素
129         public virtual void Remove(int index)
130         {
131             if (index < 0 || index > this._size)
132             {
133                 throw new ArgumentOutOfRangeException("index", "索引超出范围!");
134             }
135             this._size--;
136             if (index<this._size)
137             {
138                 Array.Copy(this._items,index+1,this._items,index,this._size-index);
139             }
140             this._items[this._size]=null; 
141         }
142 
143         //裁剪空间
144         public virtual void TrimToSize()
145         {
146             this.Capacity = this._size;
147         }
148     }
View Code

 

01.线性表 ArrayList

标签:

原文地址:http://www.cnblogs.com/weiweibtm/p/5354730.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!