Ejemplo n.º 1
0
        /// <summary>
        /// insert key and value into hashtable
        /// if the key already in the hashtable, change the value
        /// </summary>
        /// <param name="key"></param>
        /// <param name="val"></param>
        public void Insert(K key, V val)
        {
            SingleListNode <K, V> results = search(key);

            if (results != null)
            {
                results.Value = val;
                return;
            }

            SingleListNode <K, V> node = new SingleListNode <K, V>(key, val);

            node.Next = arrs[GetPosition(key)];
            arrs[GetPosition(key)] = node;
            count++;

            if (count / arrs.Length >= 10)
            {
                SingleListNode <K, V>[] tmp = arrs;
                arrs  = new SingleListNode <K, V> [count];
                count = 0;
                for (int i = 0; i < tmp.Length; i++)
                {
                    SingleListNode <K, V> sln = tmp[i];
                    while (sln != null)
                    {
                        Insert(sln.Key, sln.Value);
                        sln = sln.Next;
                    }
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// search the key from table
        /// If not found, return null
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        private SingleListNode <K, V> search(K key)
        {
            int position = GetPosition(key);
            SingleListNode <K, V> results = arrs[position];

            while (results != null && !results.Key.Equals(key))
            {
                results = results.Next;
            }

            return(results);
        }
Ejemplo n.º 3
0
        public void Insert(T item)
        {
            SingleListNode <T> node = new SingleListNode <T>(item);

            Count++;
            if (head == null || tail == null)
            {
                head = tail = node;
            }
            else
            {
                tail.Next = node;
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// search
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        public SingleListNode <T> Search(T item)
        {
            SingleListNode <T> node = head;

            while (node != null)
            {
                if (node.Key.CompareTo(item) == 0)
                {
                    return(node);
                }
                else
                {
                    node = node.Next;
                }
            }

            return(null);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// delete key in hashtable, if not contains , throw exception
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public V Delete(K key)
        {
            if (!Contains(key))
            {
                throw new Exception("can not find key");
            }

            int position = GetPosition(key);
            SingleListNode <K, V> results = arrs[position];



            if (results.Key.Equals(key))
            {
                arrs[position] = results.Next;
            }
            else
            {
                SingleListNode <K, V> before = arrs[position];
                while (results != null && !results.Key.Equals(key))
                {
                    before  = results;
                    results = results.Next;
                }
                before.Next = results.Next;
            }
            count--;
            if (count >= 4 && arrs.Length / count > 8)
            {
                SingleListNode <K, V>[] tmp = arrs;
                arrs  = new SingleListNode <K, V> [count];
                count = 0;
                for (int i = 0; i < tmp.Length; i++)
                {
                    SingleListNode <K, V> sln = tmp[i];
                    while (sln != null)
                    {
                        Insert(sln.Key, sln.Value);
                        sln = sln.Next;
                    }
                }
            }
            return(results.Value);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// delete the first item meet in list
        /// </summary>
        /// <param name="item"></param>
        public void Delete(T item)
        {
            if (IsEmpty)
            {
                return;
            }

            SingleListNode <T> node = head;

            while (node != null)
            {
                if (node.Key.CompareTo(item) == 0)
                {
                    //this node is head
                    if (tail == head)
                    {
                        tail = null;
                    }
                    head = head.Next;

                    Count--;
                    return;
                }
                else if (node.Next != null && node.Next.Key.CompareTo(item) == 0)
                {
                    Count--;
                    if (tail == node.Next)
                    {
                        tail      = node;
                        node.Next = null;
                    }
                    else
                    {
                        node.Next = node.Next.Next;
                    }
                    return;
                }
                else
                {
                    node = node.Next;
                }
            }
        }
Ejemplo n.º 7
0
        /// <summary>
        /// whether the Hashtable contains the key
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public bool Contains(K key)
        {
            SingleListNode <K, V> results = search(key);

            return(results != null);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// search the key from table
        /// If not found, return null
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public V Search(K key)
        {
            SingleListNode <K, V> results = search(key);

            return(results == null ? null : results.Value);
        }