C# 自定义集合

C#自定义集合

集合


    //自定义集合
    public class Myset<T>
    {
        private const int defualtSize = 4;
        private T[] items;
        private int _size;
        private T[] emptyArray = new T[0];


        public int Count
        {
            get
            {
                return _size;
            }
        }

        public T this[int index]
        {
            get
            { 
                if (items == null)
                {
                    return default(T);

                }

                if (index < 0 || index >= items.Length)
                {
                    throw new Exception("数组下标异常!");
                }
                return items[index];
            }

            set
            {
                if (items == null)
                {
                    return ;

                }

                if (index < 0 || index >= items.Length)
                {
                    throw new Exception("数组下标异常!");
                }
                items[index] = value;
            }
        }

        public Myset()
        {
            items = emptyArray;
        }

        public Myset(int size)
        {
            items = new T[size];
        }

        //添加数据

        public void Add(T item)
        {
            if (item == null)
            {
                throw new Exception("添加的元素不能为空!");
            }

            if (_size == items.Length)
            {
                //说明我们的数组放满了
                //扩容之后的长度
                int num = (items.Length == 0) ? defualtSize : items.Length * 2;
                SetCapacity(num);
            }

            items[_size] = item;
            _size++;
            //TODO

        }

        //移除数据
        public bool Remove(T item)
        {
            if (item == null)
            {
                throw new Exception("移除的元素不能为空!");
            }

            //找到要移除元素的下标
            int index = IndexOf(item);
            //把后面的元素往前挪一位
            if (index >= 0)
            {
                Array.Copy(items, index + 1, items, index, _size - index - 1);
                //把最后的元素设置为空
                items[_size - 1] = default(T);
                //把长度--
                _size--;
                return true;

            }

            return false;
        }

        //清空的方法
        public void Clear()
        {

            if(_size > 0)
            {
                Array.Clear(items, 0, _size);
                _size = 0;
            }
        }

        //扩容的方法
        public void SetCapacity(int length)
        {
            if (length <= _size)
            {
                throw new Exception("扩容的长度不能比当前的长度小!");
            }

            T[] array = new T[length];
            if (_size > 0)
            {
                Array.Copy(items, array, _size);

            }
            items = array;
        }

        public int IndexOf(T item)
        {
            for (int i = 0; i < _size; i++)
            {
                if (items[i].Equals(item)) { return i; }
            }

            return -1;

        }
    }


测试

class TestMyset
    {
        static void Main(string[] args)
        {
            Myset<int> myset = new Myset<int>();
            myset.Add(1);
            myset.Add(2);
            myset.Add(3);
            myset.Add(4);

            myset.Remove(4);

            for (int i = 0; i < myset.Count; i++)
            {
                Console.WriteLine(" i : {0} v : {1} ",i,myset[1]);
            }

            myset.Clear();

            for (int i = 0; i < myset.Count; i++)
            {
                Console.WriteLine(" i : {0} v : {1} ", i, myset[1]);
            }

            Console.ReadLine();
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值