zoukankan      html  css  js  c++  java
  • ArrayList简单实现代码,欢迎大家指点

    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++;
                        }
                    }
                }
            }
        }
    }

  • 相关阅读:
    命令行参数解析
    业务
    从0开始架构二
    从0开始架构读书笔记
    增加ldl
    工具论
    go的web框架的context回调的原理
    id生成器雪花算法和雪花算法的sony实现
    软件架构师应该知道的97件事(六)
    进程通信简介
  • 原文地址:https://www.cnblogs.com/zzuhjf/p/ArrayList.html
Copyright © 2011-2022 走看看