C# :自己动手实现:使用数组的方式实现List
2017-11-16 17:07
453 查看
今天用List的时候突然想到。List在C#内部究竟是如何实现的
为什么可以动态增删元素,而数组不行,查了一下相关资料,发现大家实现的方式各不相同。
于是自己用了数组的方式实现了一个List
具体是实现方式其实数组也没有动态的变换长度,而是感觉用了一个障眼法的样子。弄了一个最大的容量和当前数组有效的长度
特别简单的一串代码。没有做任何的异常处理。在删除数据后也没有做判断是否需要释放过多的空间
为什么可以动态增删元素,而数组不行,查了一下相关资料,发现大家实现的方式各不相同。
于是自己用了数组的方式实现了一个List
具体是实现方式其实数组也没有动态的变换长度,而是感觉用了一个障眼法的样子。弄了一个最大的容量和当前数组有效的长度
class MyList<T> { private T[] myArray; private int size; //当前长度 private int capacity; //最大容量 public int Count { get { return size; } } //长度计数 public T this[int index] //索引器 { get { return myArray[index]; } set { myArray[index] = value; } } public MyList() { size = 0; capacity = 10; myArray = new T[capacity]; } public void Add(T n) { if (size == capacity) { capacity *= 2; T[] tempArray = myArray; myArray = new T[capacity]; tempArray.CopyTo(myArray, 0); } myArray[size] = n; size += 1; } public void Insert(int index, T n) { if (size==capacity) { capacity *= 2; } for (int i = size; i > index; i--) { myArray[i] = myArray[i - 1]; } myArray[index] = n; size++; } public void RemoveAt(int index) { if (index<0&&index>size) { return; } for (int i = index; i <size-1; i++) { myArray[i] = myArray[i + 1]; } myArray[size-1]=default(T); size--; } public void Remove(T n) { for (int i = 0; i < myArray.Length; i++) { if (myArray[i].Equals(n)) { RemoveAt(i); } } } }
特别简单的一串代码。没有做任何的异常处理。在删除数据后也没有做判断是否需要释放过多的空间
相关文章推荐
- C#使用泛型数组简单实现一个列表List
- c# 使用linq查询子句方式实现 字符串数组统计操作
- 自己动手实现一个C#中List
- C# 自己动手实现Spy++(一)
- 自己动手开发音乐播放器《六》播放方式的实现
- 验证码识别实践2:自己动手C#实现,对CSDN资源上传验证码识别率100%,久游网登陆90%
- C#中使用repeater控件实现List的clear,add,update,delete功能之二数据库
- 动手实现自己的 STL 容器《2》---- list
- c#使用数组实现二叉查找树
- c# list排序的三种实现方式
- Arrays使用方式,数组转换成List
- C# 使用重载消息处理函数的方式,实现没有标题栏的窗体的拖动。
- 验证码识别实践3:自己动手C#实现,颜色差异法去除干扰线
- 自己动手开发音乐播放器《七》使用滑块实现音量和播放进度
- 三种C#实现数组反转方式
- C#中使用BindingList 绑定DataGridView 可以实现动态绑定,优与List<T>集合的绑定
- C# List<T>使用方式
- 验证码识别实践1:自己动手C#实现
- c# list排序的三种实现方式
- c# list排序的三种实现方式