2008年11月23日星期日

C#中HashTable先进先出






C#中HashTable先进先出

笔试遇到一个题,不会做,回来查了查。

题目:写一个类,从HashTable继承,实现先进先出。

分析:HashTable在MSDN中的介绍是:“表示键/值对的集合,这些键/值对根据键的哈希代码进行组织”。可以看出HashTable是根据Key的HashCode进行组织,从外部无法干预HashTable的内部顺序。要想实现HashTable的先进先出,必须重写HashTable的存储和读取,存储时加入先进先出的排序,读取时按照先进先出的排序读取。思路有了就要看如何实现。C#中ArrayList是先进先出,可以将ArrayList作为排序,在加入一对键值的同时在ArrayList中加入值,读取时按照ArrayList的顺序读取。

实现:

    public class MyHashTable : Hashtable
    {
        private ArrayList arr = new ArrayList();

        //重写添加,引入ArrayList排序,和HashTable键值对应
        public override void Add(object key, object value)
        {
            base.Add(key, value);
            arr.Add(key);
        }

        public override void Clear()
        {
            base.Clear();
            arr.Clear();
        }

        public override void Remove(object key)
        {
            base.Remove(key);
            arr.Remove(key);
        }

        //遍历Key时读取ArrayList的Key,实现读取时先进先出
        public override ICollection Keys
        {
            get
            {
                return arr;
            }
        }
    }

在Visual Studio 2008中测试通过。



没有评论: