01.线性表 ArrayList
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了01.线性表 ArrayList相关的知识,希望对你有一定的参考价值。
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 }
以上是关于01.线性表 ArrayList的主要内容,如果未能解决你的问题,请参考以下文章
[从今天开始修炼数据结构]线性表及其实现以及实现有Itertor的ArrayList和LinkedList