• 16 BasicHashTable基本哈希表类(三)——Live555源码阅读(一)基本组件类


    这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类。

    本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/oloroso/
    本文由乌合之众 lym瞎编,欢迎转载 my.oschina.net/oloroso

    哈希表的增删查改

    这是BasicHashTable基本哈希表类源码分析的最后一个部分,即哈希表的基本操作方法。这里时间没有直接给出修改条目的方法,因为它包含在了add方法中。

    Add方法(增加条目)

    Add方法先从哈希表中查找参数key对应的条目是否存在,存在的话替换value,不存在创建一个条目,并加入哈希表。如果加入后哈希表的条目过多了,就重建哈希表。其返回值为原来key对应条目的value,如果不存在,返回NULL

    void* BasicHashTable::Add(char const* key, void* value) {
      void* oldValue;
      unsigned index;
      TableEntry* entry = lookupKey(key, index);
      if (entry != NULL) {
        // There's already an item with this key
        oldValue = entry->value;
      } else {
        // There's no existing entry; create a new one:
        entry = insertNewEntry(index, key);
        oldValue = NULL;
      }
    entry->value = value;
      // If the table has become too large, rebuild it with more buckets:
     // 如果该表已经变得太大,重建更多的桶给它:
    if (fNumEntries >= fRebuildSize) rebuild();
      return oldValue;
    }
    

    Remove方法(删除条目)

    Remove方法从哈希表中移除key对应的条目,并进行回收。如果key对应的条目在哈希表中存在,返回true,不存在返回false

    Boolean BasicHashTable::Remove(char const* key) {
      unsigned index;
      TableEntry* entry = lookupKey(key, index);
      if (entry == NULL) return False; // no such entry
    
      deleteEntry(index, entry);
    
      return True;
    }
    Lookup方法(查找条目)
    Lookup方法用于从哈希表中查找key对应的条目,如果存在,返回条目的value,如果不存在,返回NULL。
    void* BasicHashTable::Lookup(char const* key) const {
      unsigned index;
      TableEntry* entry = lookupKey(key, index);
      if (entry == NULL) return NULL; // no such entry
    
      return entry->value;
    }
    

    Lookup方法(查找条目)

    Lookup方法用于从哈希表中查找key对应的条目,如果存在,返回条目的value,如果不存在,返回NULL。

    void* BasicHashTable::Lookup(char const* key) const {
      unsigned index;
      TableEntry* entry = lookupKey(key, index);
      if (entry == NULL) return NULL; // no such entry
    
      return entry->value;
    }
    
  • 相关阅读:
    mysql中使用row_number()函数
    Android开发环境的搭建之(二)Android Studio的安装
    Android开发环境的搭建之(一)Java开发环境的安装
    进程与线程
    工作起始之博客搬家
    MapReduce的自制Writable分组输出及组内排序
    map端join和reduce端join的区别
    String.StartsWith 方法
    RPC和心跳机制
    MAPREDUCE中的序列化
  • 原文地址:https://www.cnblogs.com/oloroso/p/4599643.html
Copyright © 2020-2023  润新知