为摊代言 發表於 2020-9-2 12:45:00

Delphi的HashMap

<p>使用过Java的朋友,应该知道它有个超好用的HashMap容器类,面试必问的,在Delphi10中有TDictionary类,但Delphi7没得用,所以自己动手,使用数组 + 链表写个类似Java的HashMap类,提供给所有坚守Delphi的朋友们,性能还是相当不错的。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> <span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)">*******************************************************</span><span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 128, 1)">2</span> <span style="color: rgba(0, 128, 0, 1)">{</span>                                                       <span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 128, 1)">3</span> <span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)">       Delphi HashMap                                  </span><span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 128, 1)">4</span> <span style="color: rgba(0, 128, 0, 1)">{</span>                                                       <span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 128, 1)">5</span> <span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)">       版权所有 (C) 2018 hsoft                        </span><span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 128, 1)">6</span> <span style="color: rgba(0, 128, 0, 1)">{</span>                                                       <span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 128, 1)">7</span> <span style="color: rgba(0, 128, 0, 1)">{</span>                                                       <span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 128, 1)">8</span> <span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)"> Author: MarkWu    Email: 77910086@qq.com            </span><span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 128, 1)">9</span> <span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)"> Date:   2018-01-02 14:17:00                           </span><span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 128, 1)"> 10</span> <span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)"> Desc:   HashMap                                       </span><span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 128, 1)"> 11</span> <span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)">*******************************************************</span><span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 128, 1)"> 12</span>
<span style="color: rgba(0, 128, 128, 1)"> 13</span> <span style="color: rgba(0, 0, 255, 1)">unit</span><span style="color: rgba(0, 0, 0, 1)"> uHashMap;
</span><span style="color: rgba(0, 128, 128, 1)"> 14</span>
<span style="color: rgba(0, 128, 128, 1)"> 15</span> <span style="color: rgba(0, 0, 255, 1)">interface</span>
<span style="color: rgba(0, 128, 128, 1)"> 16</span>
<span style="color: rgba(0, 128, 128, 1)"> 17</span> <span style="color: rgba(0, 0, 255, 1)">uses</span>
<span style="color: rgba(0, 128, 128, 1)"> 18</span> <span style="color: rgba(0, 0, 0, 1)">Windows, SysUtils, StrUtils, Classes, uHashEntry, Variants;
</span><span style="color: rgba(0, 128, 128, 1)"> 19</span>
<span style="color: rgba(0, 128, 128, 1)"> 20</span> <span style="color: rgba(0, 0, 255, 1)">type</span>
<span style="color: rgba(0, 128, 128, 1)"> 21</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 实体数组类型</span>
<span style="color: rgba(0, 128, 128, 1)"> 22</span>   TEntrySet = <span style="color: rgba(0, 0, 255, 1)">array</span> <span style="color: rgba(0, 0, 255, 1)">of</span><span style="color: rgba(0, 0, 0, 1)"> THashEntry;
</span><span style="color: rgba(0, 128, 128, 1)"> 23</span>   
<span style="color: rgba(0, 128, 128, 1)"> 24</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 排序类型</span>
<span style="color: rgba(0, 128, 128, 1)"> 25</span>   TSortType =<span style="color: rgba(0, 0, 0, 1)"> (
</span><span style="color: rgba(0, 128, 128, 1)"> 26</span>         stKey,      <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 按Key排序</span>
<span style="color: rgba(0, 128, 128, 1)"> 27</span>         stValue,    <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 按Value排序</span>
<span style="color: rgba(0, 128, 128, 1)"> 28</span>         stKeyValue<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Key=Value排序</span>
<span style="color: rgba(0, 128, 128, 1)"> 29</span> <span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 30</span>
<span style="color: rgba(0, 128, 128, 1)"> 31</span>   THashMap = <span style="color: rgba(0, 0, 255, 1)">class</span>
<span style="color: rgba(0, 128, 128, 1)"> 32</span>   <span style="color: rgba(0, 0, 255, 1)">private</span>
<span style="color: rgba(0, 128, 128, 1)"> 33</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 临界值</span>
<span style="color: rgba(0, 128, 128, 1)"> 34</span> <span style="color: rgba(0, 0, 0, 1)">    FThreshold: Integer;
</span><span style="color: rgba(0, 128, 128, 1)"> 35</span>
<span style="color: rgba(0, 128, 128, 1)"> 36</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 元素个数</span>
<span style="color: rgba(0, 128, 128, 1)"> 37</span> <span style="color: rgba(0, 0, 0, 1)">    FCount: Integer;
</span><span style="color: rgba(0, 128, 128, 1)"> 38</span>
<span style="color: rgba(0, 128, 128, 1)"> 39</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 扩容次数</span>
<span style="color: rgba(0, 128, 128, 1)"> 40</span> <span style="color: rgba(0, 0, 0, 1)">    FResize: Integer;
</span><span style="color: rgba(0, 128, 128, 1)"> 41</span>
<span style="color: rgba(0, 128, 128, 1)"> 42</span> <span style="color: rgba(0, 0, 0, 1)">    FTable: TEntrySet;
</span><span style="color: rgba(0, 128, 128, 1)"> 43</span>
<span style="color: rgba(0, 128, 128, 1)"> 44</span>   <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> InitTable();
</span><span style="color: rgba(0, 128, 128, 1)"> 45</span>
<span style="color: rgba(0, 128, 128, 1)"> 46</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 计算AKey的HashCode</span>
<span style="color: rgba(0, 128, 128, 1)"> 47</span>   <span style="color: rgba(0, 0, 255, 1)">function</span> HashCode(AKey: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">): Integer;
</span><span style="color: rgba(0, 128, 128, 1)"> 48</span>   <span style="color: rgba(0, 0, 255, 1)">function</span> IndexOf(AKey: <span style="color: rgba(0, 0, 255, 1)">string</span>; iLen: Integer = <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">): Integer;
</span><span style="color: rgba(0, 128, 128, 1)"> 49</span>   
<span style="color: rgba(0, 128, 128, 1)"> 50</span>   <span style="color: rgba(0, 0, 255, 1)">procedure</span> Put(AIndex: Integer; AKey: <span style="color: rgba(0, 0, 255, 1)">string</span>; AValue: Variant; AIsObj: Boolean =<span style="color: rgba(0, 0, 0, 1)"> False);
</span><span style="color: rgba(0, 128, 128, 1)"> 51</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 加入Key为空</span>
<span style="color: rgba(0, 128, 128, 1)"> 52</span>   <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> PutNullKey(AValue: Variant);
</span><span style="color: rgba(0, 128, 128, 1)"> 53</span>
<span style="color: rgba(0, 128, 128, 1)"> 54</span>   <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> Resize(capacity: Integer);
</span><span style="color: rgba(0, 128, 128, 1)"> 55</span>
<span style="color: rgba(0, 128, 128, 1)"> 56</span>   <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> ToList: TList;
</span><span style="color: rgba(0, 128, 128, 1)"> 57</span>
<span style="color: rgba(0, 128, 128, 1)"> 58</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">扩容时重新计算各元素的index</span>
<span style="color: rgba(0, 128, 128, 1)"> 59</span>   <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> Transfer(ANewTable: TEntrySet);
</span><span style="color: rgba(0, 128, 128, 1)"> 60</span>   <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> GetItems(Index: Integer): THashEntry;
</span><span style="color: rgba(0, 128, 128, 1)"> 61</span>
<span style="color: rgba(0, 128, 128, 1)"> 62</span>   <span style="color: rgba(0, 0, 255, 1)">public</span>
<span style="color: rgba(0, 128, 128, 1)"> 63</span>   <span style="color: rgba(0, 0, 255, 1)">constructor</span> <span style="color: rgba(0, 0, 255, 1)">Create</span><span style="color: rgba(0, 0, 0, 1)">();
</span><span style="color: rgba(0, 128, 128, 1)"> 64</span>   <span style="color: rgba(0, 0, 255, 1)">destructor</span> <span style="color: rgba(0, 0, 255, 1)">Destroy</span>; <span style="color: rgba(0, 0, 255, 1)">override</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 65</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 添加一个元素</span>
<span style="color: rgba(0, 128, 128, 1)"> 66</span>   <span style="color: rgba(0, 0, 255, 1)">procedure</span> Add(AKey: <span style="color: rgba(0, 0, 255, 1)">string</span>; AValue: Variant; AIsObj: Boolean = False); <span style="color: rgba(0, 0, 255, 1)">overload</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 67</span>   <span style="color: rgba(0, 0, 255, 1)">procedure</span> Add(AMap: THashMap); <span style="color: rgba(0, 0, 255, 1)">overload</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 68</span>   <span style="color: rgba(0, 0, 255, 1)">procedure</span> AddObject(AKey: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">; AValue: TObject);
</span><span style="color: rgba(0, 128, 128, 1)"> 69</span>
<span style="color: rgba(0, 128, 128, 1)"> 70</span>   <span style="color: rgba(0, 0, 255, 1)">function</span> Get(AKey: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">): Variant;
</span><span style="color: rgba(0, 128, 128, 1)"> 71</span>   <span style="color: rgba(0, 0, 255, 1)">function</span> GetObject(AKey: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">): TObject;
</span><span style="color: rgba(0, 128, 128, 1)"> 72</span>   <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> GetNullKey: Variant;
</span><span style="color: rgba(0, 128, 128, 1)"> 73</span>   <span style="color: rgba(0, 0, 255, 1)">function</span> GetEntry(AKey: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">): THashEntry;
</span><span style="color: rgba(0, 128, 128, 1)"> 74</span>   <span style="color: rgba(0, 0, 255, 1)">procedure</span> Remove(AKey: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 75</span>   <span style="color: rgba(0, 0, 255, 1)">function</span> ContainsKey(AKey: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">): Boolean;
</span><span style="color: rgba(0, 128, 128, 1)"> 76</span>   <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> Clear;
</span><span style="color: rgba(0, 128, 128, 1)"> 77</span>
<span style="color: rgba(0, 128, 128, 1)"> 78</span>   <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> GetEntrySet: TEntrySet;
</span><span style="color: rgba(0, 128, 128, 1)"> 79</span>
<span style="color: rgba(0, 128, 128, 1)"> 80</span>   <span style="color: rgba(0, 0, 255, 1)">function</span> ToString: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 81</span>
<span style="color: rgba(0, 128, 128, 1)"> 82</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 排序</span>
<span style="color: rgba(0, 128, 128, 1)"> 83</span>   <span style="color: rgba(0, 0, 255, 1)">function</span> Sort(ASortType: TSortType =<span style="color: rgba(0, 0, 0, 1)"> stKeyValue): TEntrySet;
</span><span style="color: rgba(0, 128, 128, 1)"> 84</span>
<span style="color: rgba(0, 128, 128, 1)"> 85</span>   <span style="color: rgba(0, 0, 255, 1)">property</span> Count: Integer <span style="color: rgba(0, 0, 255, 1)">read</span><span style="color: rgba(0, 0, 0, 1)"> FCount;
</span><span style="color: rgba(0, 128, 128, 1)"> 86</span>   <span style="color: rgba(0, 0, 255, 1)">property</span> Items: THashEntry <span style="color: rgba(0, 0, 255, 1)">read</span> GetItems; <span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 87</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 88</span>
<span style="color: rgba(0, 128, 128, 1)"> 89</span> <span style="color: rgba(0, 0, 255, 1)">implementation</span>
<span style="color: rgba(0, 128, 128, 1)"> 90</span>
<span style="color: rgba(0, 128, 128, 1)"> 91</span>
<span style="color: rgba(0, 128, 128, 1)"> 92</span> <span style="color: rgba(0, 0, 255, 1)">const</span>
<span style="color: rgba(0, 128, 128, 1)"> 93</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">默认初始化大小 16, 数组长度一定是2的次幂</span>
<span style="color: rgba(0, 128, 128, 1)"> 94</span>   DEFAULT_INITIAL_CAPACITY = <span style="color: rgba(128, 0, 128, 1)">16</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 95</span>
<span style="color: rgba(0, 128, 128, 1)"> 96</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">默认负载因子 0.75</span>
<span style="color: rgba(0, 128, 128, 1)"> 97</span>   DEFAULT_LOAD_FACTOR = <span style="color: rgba(128, 0, 128, 1)">0.75</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 98</span>
<span style="color: rgba(0, 128, 128, 1)"> 99</span>   MAX_SIZE = <span style="color: rgba(128, 0, 128, 1)">1000000</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">100</span>
<span style="color: rgba(0, 128, 128, 1)">101</span> <span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)"> THashMap </span><span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 128, 1)">102</span>
<span style="color: rgba(0, 128, 128, 1)">103</span> <span style="color: rgba(0, 0, 255, 1)">constructor</span> THashMap.<span style="color: rgba(0, 0, 255, 1)">Create</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">104</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">105</span> <span style="color: rgba(0, 0, 0, 1)">InitTable;
</span><span style="color: rgba(0, 128, 128, 1)">106</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">107</span>
<span style="color: rgba(0, 128, 128, 1)">108</span> <span style="color: rgba(0, 0, 255, 1)">destructor</span> THashMap.<span style="color: rgba(0, 0, 255, 1)">Destroy</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">109</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">110</span> <span style="color: rgba(0, 0, 0, 1)">Clear;
</span><span style="color: rgba(0, 128, 128, 1)">111</span>
<span style="color: rgba(0, 128, 128, 1)">112</span>   SetLength(FTable, <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">113</span>   FCount := <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">114</span>   <span style="color: rgba(0, 0, 255, 1)">inherited</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">115</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">116</span>
<span style="color: rgba(0, 128, 128, 1)">117</span>
<span style="color: rgba(0, 128, 128, 1)">118</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> THashMap.InitTable;
</span><span style="color: rgba(0, 128, 128, 1)">119</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">120</span> <span style="color: rgba(0, 0, 0, 1)">SetLength(FTable, DEFAULT_INITIAL_CAPACITY);
</span><span style="color: rgba(0, 128, 128, 1)">121</span>   FThreshold := Trunc(DEFAULT_INITIAL_CAPACITY *<span style="color: rgba(0, 0, 0, 1)"> DEFAULT_LOAD_FACTOR);
</span><span style="color: rgba(0, 128, 128, 1)">122</span>   FCount := <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">123</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">124</span>
<span style="color: rgba(0, 128, 128, 1)">125</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 计算AKey的HashCode</span>
<span style="color: rgba(0, 128, 128, 1)">126</span> <span style="color: rgba(0, 0, 255, 1)">function</span> THashMap.HashCode(AKey: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">): Integer;
</span><span style="color: rgba(0, 128, 128, 1)">127</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)">128</span> <span style="color: rgba(0, 0, 0, 1)">I: Integer;
</span><span style="color: rgba(0, 128, 128, 1)">129</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>                                       
<span style="color: rgba(0, 128, 128, 1)">130</span>   Result := <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">131</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> (Result = <span style="color: rgba(128, 0, 128, 1)">0</span>) <span style="color: rgba(0, 0, 255, 1)">and</span> (Length(AKey) &gt; <span style="color: rgba(128, 0, 128, 1)">0</span>) <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">132</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">133</span>   <span style="color: rgba(0, 0, 255, 1)">for</span> I := <span style="color: rgba(128, 0, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">to</span> Length(AKey) <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)">134</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">135</span>       Result := <span style="color: rgba(128, 0, 128, 1)">31</span> * Result +<span style="color: rgba(0, 0, 0, 1)"> Ord(AKey);
</span><span style="color: rgba(0, 128, 128, 1)">136</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">137</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">138</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">139</span>
<span style="color: rgba(0, 128, 128, 1)">140</span> <span style="color: rgba(0, 0, 255, 1)">function</span> THashMap.IndexOf(AKey: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">; iLen: Integer): Integer;
</span><span style="color: rgba(0, 128, 128, 1)">141</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">142</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> iLen = <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(0, 0, 255, 1)">then</span> iLen :=<span style="color: rgba(0, 0, 0, 1)"> Length(FTable);
</span><span style="color: rgba(0, 128, 128, 1)">143</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 根据key的hashcode和table长度取模计算key在table中的位置</span>
<span style="color: rgba(0, 128, 128, 1)">144</span>   Result := HashCode(AKey) <span style="color: rgba(0, 0, 255, 1)">and</span> (iLen - <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">145</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">146</span>
<span style="color: rgba(0, 128, 128, 1)">147</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span> THashMap.Add(AKey: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">; AValue: Variant; AIsObj: Boolean);
</span><span style="color: rgba(0, 128, 128, 1)">148</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)">149</span> <span style="color: rgba(0, 0, 0, 1)">index: Integer;
</span><span style="color: rgba(0, 128, 128, 1)">150</span> <span style="color: rgba(0, 0, 0, 1)">entry: THashEntry;
</span><span style="color: rgba(0, 128, 128, 1)">151</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">152</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> key为''时,需要特殊处理</span>
<span style="color: rgba(0, 128, 128, 1)">153</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> AKey = <span style="color: rgba(128, 0, 0, 1)">''</span> <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">154</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">155</span> <span style="color: rgba(0, 0, 0, 1)">    PutNullKey(AValue);
</span><span style="color: rgba(0, 128, 128, 1)">156</span> <span style="color: rgba(0, 0, 0, 1)">    Exit;
</span><span style="color: rgba(0, 128, 128, 1)">157</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">158</span>
<span style="color: rgba(0, 128, 128, 1)">159</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> Length(FTable) = <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">160</span> <span style="color: rgba(0, 0, 0, 1)">    InitTable;
</span><span style="color: rgba(0, 128, 128, 1)">161</span>
<span style="color: rgba(0, 128, 128, 1)">162</span>   index :=<span style="color: rgba(0, 0, 0, 1)"> IndexOf(AKey);
</span><span style="color: rgba(0, 128, 128, 1)">163</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 遍历index位置的Entry, 若找到重复key,则更新对应entry的值,再返回</span>
<span style="color: rgba(0, 128, 128, 1)">164</span>   entry :=<span style="color: rgba(0, 0, 0, 1)"> FTable;
</span><span style="color: rgba(0, 128, 128, 1)">165</span>   <span style="color: rgba(0, 0, 255, 1)">while</span> entry &lt;&gt; <span style="color: rgba(0, 0, 255, 1)">nil</span> <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)">166</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">167</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> (HashCode(entry.Key) = HashCode(AKey)) <span style="color: rgba(0, 0, 255, 1)">and</span> (SameText(entry.Key, AKey)) <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">168</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">169</span>       <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">entry.Value := Unassigned;</span>
<span style="color: rgba(0, 128, 128, 1)">170</span>       entry.Value :=<span style="color: rgba(0, 0, 0, 1)"> AValue;
</span><span style="color: rgba(0, 128, 128, 1)">171</span> <span style="color: rgba(0, 0, 0, 1)">      Exit;
</span><span style="color: rgba(0, 128, 128, 1)">172</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">173</span>   entry :=<span style="color: rgba(0, 0, 0, 1)"> entry.Next;
</span><span style="color: rgba(0, 128, 128, 1)">174</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">175</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 如果index位置没有找到或者未找到重复的Key, 则将新Key添加到table的index位置</span>
<span style="color: rgba(0, 128, 128, 1)">176</span> <span style="color: rgba(0, 0, 0, 1)">Put(index, AKey, AValue, AIsObj);
</span><span style="color: rgba(0, 128, 128, 1)">177</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">178</span>
<span style="color: rgba(0, 128, 128, 1)">179</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> THashMap.PutNullKey(AValue: Variant);
</span><span style="color: rgba(0, 128, 128, 1)">180</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)">181</span> <span style="color: rgba(0, 0, 0, 1)">entry: THashEntry;
</span><span style="color: rgba(0, 128, 128, 1)">182</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">183</span>   entry := FTable[<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 128, 128, 1)">184</span>   <span style="color: rgba(0, 0, 255, 1)">while</span> entry &lt;&gt; <span style="color: rgba(0, 0, 255, 1)">nil</span> <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)">185</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">186</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 如果找到Key为空的对象时,则覆盖它</span>
<span style="color: rgba(0, 128, 128, 1)">187</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> entry.Key = <span style="color: rgba(128, 0, 0, 1)">''</span> <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">188</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">189</span>       entry.Value :=<span style="color: rgba(0, 0, 0, 1)"> AValue;
</span><span style="color: rgba(0, 128, 128, 1)">190</span> <span style="color: rgba(0, 0, 0, 1)">      Exit;
</span><span style="color: rgba(0, 128, 128, 1)">191</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">192</span>
<span style="color: rgba(0, 128, 128, 1)">193</span>   entry :=<span style="color: rgba(0, 0, 0, 1)"> entry.Next;
</span><span style="color: rgba(0, 128, 128, 1)">194</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">195</span>   Put(<span style="color: rgba(128, 0, 128, 1)">0</span>, <span style="color: rgba(128, 0, 0, 1)">''</span><span style="color: rgba(0, 0, 0, 1)">, AValue);
</span><span style="color: rgba(0, 128, 128, 1)">196</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">197</span>
<span style="color: rgba(0, 128, 128, 1)">198</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span> THashMap.Put(AIndex: Integer; AKey: <span style="color: rgba(0, 0, 255, 1)">string</span>; AValue: Variant; AIsObj: Boolean =<span style="color: rgba(0, 0, 0, 1)"> False);
</span><span style="color: rgba(0, 128, 128, 1)">199</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)">200</span> <span style="color: rgba(0, 0, 0, 1)">entry: THashEntry;
</span><span style="color: rgba(0, 128, 128, 1)">201</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">202</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 将新的entry放到table的index位置第一个, 如果原来有值则以链表存放</span>
<span style="color: rgba(0, 128, 128, 1)">203</span>   entry := THashEntry.<span style="color: rgba(0, 0, 255, 1)">Create</span><span style="color: rgba(0, 0, 0, 1)">(AKey, AValue, FTable, AIsObj);
</span><span style="color: rgba(0, 128, 128, 1)">204</span>   FTable :=<span style="color: rgba(0, 0, 0, 1)"> entry;
</span><span style="color: rgba(0, 128, 128, 1)">205</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 若达到临界值, 则进行扩容,将table的capacity翻倍</span>
<span style="color: rgba(0, 128, 128, 1)">206</span> <span style="color: rgba(0, 0, 0, 1)">Inc(FCount);
</span><span style="color: rgba(0, 128, 128, 1)">207</span>
<span style="color: rgba(0, 128, 128, 1)">208</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> FThreshold &gt;= MAX_SIZE <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">209</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">210</span>   FThreshold :=<span style="color: rgba(0, 0, 0, 1)"> MAX_SIZE;
</span><span style="color: rgba(0, 128, 128, 1)">211</span> <span style="color: rgba(0, 0, 0, 1)">    Exit;
</span><span style="color: rgba(0, 128, 128, 1)">212</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">213</span>
<span style="color: rgba(0, 128, 128, 1)">214</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> FCount &gt;= FThreshold <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">215</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">216</span>   Resize(Length(FTable) * <span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">217</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">218</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">219</span>
<span style="color: rgba(0, 128, 128, 1)">220</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> THashMap.Resize(capacity: Integer);
</span><span style="color: rgba(0, 128, 128, 1)">221</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)">222</span> <span style="color: rgba(0, 0, 0, 1)">I, index: Integer;
</span><span style="color: rgba(0, 128, 128, 1)">223</span> <span style="color: rgba(0, 0, 0, 1)">newTable: TEntrySet;
</span><span style="color: rgba(0, 128, 128, 1)">224</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">225</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> capacity &lt;= Length(FTable) <span style="color: rgba(0, 0, 255, 1)">then</span><span style="color: rgba(0, 0, 0, 1)"> Exit;
</span><span style="color: rgba(0, 128, 128, 1)">226</span>
<span style="color: rgba(0, 128, 128, 1)">227</span>
<span style="color: rgba(0, 128, 128, 1)">228</span> <span style="color: rgba(0, 0, 0, 1)">SetLength(newTable, capacity);
</span><span style="color: rgba(0, 128, 128, 1)">229</span>
<span style="color: rgba(0, 128, 128, 1)">230</span> <span style="color: rgba(0, 0, 0, 1)">Transfer(newTable);
</span><span style="color: rgba(0, 128, 128, 1)">231</span>   FTable := <span style="color: rgba(0, 0, 255, 1)">nil</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">232</span>   FTable :=<span style="color: rgba(0, 0, 0, 1)"> newTable;
</span><span style="color: rgba(0, 128, 128, 1)">233</span>
<span style="color: rgba(0, 128, 128, 1)">234</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">修改临界值</span>
<span style="color: rgba(0, 128, 128, 1)">235</span>   FThreshold := Trunc(Length(FTable) *<span style="color: rgba(0, 0, 0, 1)"> DEFAULT_LOAD_FACTOR);
</span><span style="color: rgba(0, 128, 128, 1)">236</span> <span style="color: rgba(0, 0, 0, 1)">Inc(FResize);
</span><span style="color: rgba(0, 128, 128, 1)">237</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">238</span>
<span style="color: rgba(0, 128, 128, 1)">239</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">重新计算index</span>
<span style="color: rgba(0, 128, 128, 1)">240</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> THashMap.Transfer(ANewTable: TEntrySet);
</span><span style="color: rgba(0, 128, 128, 1)">241</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)">242</span> <span style="color: rgba(0, 0, 0, 1)">I, newIndex: Integer;
</span><span style="color: rgba(0, 128, 128, 1)">243</span> <span style="color: rgba(0, 0, 0, 1)">iNewCapacity: Integer;
</span><span style="color: rgba(0, 128, 128, 1)">244</span> <span style="color: rgba(0, 0, 0, 1)">e, tmpNext: THashEntry;
</span><span style="color: rgba(0, 128, 128, 1)">245</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">246</span>   iNewCapacity :=<span style="color: rgba(0, 0, 0, 1)"> Length(ANewTable);
</span><span style="color: rgba(0, 128, 128, 1)">247</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 循环Table,重新计算各元素索引位置, 再把旧数组数据Copy到新数组中</span>
<span style="color: rgba(0, 128, 128, 1)">248</span>   <span style="color: rgba(0, 0, 255, 1)">for</span> I := Low(FTable) <span style="color: rgba(0, 0, 255, 1)">to</span> High(FTable) <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)">249</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">250</span>   e :=<span style="color: rgba(0, 0, 0, 1)"> FTable;
</span><span style="color: rgba(0, 128, 128, 1)">251</span>   <span style="color: rgba(0, 0, 255, 1)">while</span> e &lt;&gt; <span style="color: rgba(0, 0, 255, 1)">nil</span> <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)">252</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">253</span>       tmpNext :=<span style="color: rgba(0, 0, 0, 1)"> e.Next;
</span><span style="color: rgba(0, 128, 128, 1)">254</span>       <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 计算出新的索引</span>
<span style="color: rgba(0, 128, 128, 1)">255</span>       newIndex :=<span style="color: rgba(0, 0, 0, 1)"> IndexOf(e.Key, iNewCapacity);
</span><span style="color: rgba(0, 128, 128, 1)">256</span>       <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 把当前旧entry.next链指向新的索引位置,ANewTable可能为nil, 也可能是entry链,</span>
<span style="color: rgba(0, 128, 128, 1)">257</span>       <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 如果是entry链,就直接在链表头插入</span>
<span style="color: rgba(0, 128, 128, 1)">258</span>       e.Next :=<span style="color: rgba(0, 0, 0, 1)"> ANewTable;
</span><span style="color: rgba(0, 128, 128, 1)">259</span>       ANewTable :=<span style="color: rgba(0, 0, 0, 1)"> e;
</span><span style="color: rgba(0, 128, 128, 1)">260</span>
<span style="color: rgba(0, 128, 128, 1)">261</span>       e :=<span style="color: rgba(0, 0, 0, 1)"> tmpNext;
</span><span style="color: rgba(0, 128, 128, 1)">262</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">263</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">264</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">265</span>
<span style="color: rgba(0, 128, 128, 1)">266</span> <span style="color: rgba(0, 0, 255, 1)">function</span> THashMap.Get(AKey: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">): Variant;
</span><span style="color: rgba(0, 128, 128, 1)">267</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)">268</span> <span style="color: rgba(0, 0, 0, 1)">entry: THashEntry;
</span><span style="color: rgba(0, 128, 128, 1)">269</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">270</span>   Result :=<span style="color: rgba(0, 0, 0, 1)"> NULL;
</span><span style="color: rgba(0, 128, 128, 1)">271</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> (AKey = <span style="color: rgba(128, 0, 0, 1)">''</span>) <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">272</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">273</span>   Result :=<span style="color: rgba(0, 0, 0, 1)"> GetNullKey;
</span><span style="color: rgba(0, 128, 128, 1)">274</span> <span style="color: rgba(0, 0, 0, 1)">    Exit;
</span><span style="color: rgba(0, 128, 128, 1)">275</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">276</span>
<span style="color: rgba(0, 128, 128, 1)">277</span>   entry :=<span style="color: rgba(0, 0, 0, 1)"> GetEntry(AKey);
</span><span style="color: rgba(0, 128, 128, 1)">278</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> entry = <span style="color: rgba(0, 0, 255, 1)">nil</span> <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">279</span>   Result :=<span style="color: rgba(0, 0, 0, 1)"> NULL
</span><span style="color: rgba(0, 128, 128, 1)">280</span>   <span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(0, 128, 128, 1)">281</span>   Result :=<span style="color: rgba(0, 0, 0, 1)"> entry.Value;
</span><span style="color: rgba(0, 128, 128, 1)">282</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">283</span>
<span style="color: rgba(0, 128, 128, 1)">284</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> THashMap.GetNullKey: Variant;
</span><span style="color: rgba(0, 128, 128, 1)">285</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)">286</span> <span style="color: rgba(0, 0, 0, 1)">e: THashEntry;
</span><span style="color: rgba(0, 128, 128, 1)">287</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">288</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> FCount = <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">289</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">290</span>   Result :=<span style="color: rgba(0, 0, 0, 1)"> Null;
</span><span style="color: rgba(0, 128, 128, 1)">291</span> <span style="color: rgba(0, 0, 0, 1)">    Exit;
</span><span style="color: rgba(0, 128, 128, 1)">292</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">293</span>
<span style="color: rgba(0, 128, 128, 1)">294</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">在FTable的链表上查找key为''的键值对,因为''默认是存在FTable的桶里</span>
<span style="color: rgba(0, 128, 128, 1)">295</span>   e := FTable[<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 128, 128, 1)">296</span>   <span style="color: rgba(0, 0, 255, 1)">while</span> e &lt;&gt; <span style="color: rgba(0, 0, 255, 1)">nil</span> <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)">297</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">298</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> e.Key = <span style="color: rgba(128, 0, 0, 1)">''</span> <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">299</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">300</span>       Result :=<span style="color: rgba(0, 0, 0, 1)"> e.Value;
</span><span style="color: rgba(0, 128, 128, 1)">301</span> <span style="color: rgba(0, 0, 0, 1)">      Break;
</span><span style="color: rgba(0, 128, 128, 1)">302</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">303</span>   e :=<span style="color: rgba(0, 0, 0, 1)"> e.Next;
</span><span style="color: rgba(0, 128, 128, 1)">304</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">305</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">306</span>
<span style="color: rgba(0, 128, 128, 1)">307</span>
<span style="color: rgba(0, 128, 128, 1)">308</span> <span style="color: rgba(0, 0, 255, 1)">function</span> THashMap.GetEntry(AKey: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">): THashEntry;
</span><span style="color: rgba(0, 128, 128, 1)">309</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)">310</span> <span style="color: rgba(0, 0, 0, 1)">entry: THashEntry;
</span><span style="color: rgba(0, 128, 128, 1)">311</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">312</span>   entry :=<span style="color: rgba(0, 0, 0, 1)"> FTable;
</span><span style="color: rgba(0, 128, 128, 1)">313</span>   <span style="color: rgba(0, 0, 255, 1)">try</span>
<span style="color: rgba(0, 128, 128, 1)">314</span>   <span style="color: rgba(0, 0, 255, 1)">while</span> (entry &lt;&gt; <span style="color: rgba(0, 0, 255, 1)">nil</span>) <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)">315</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">316</span>       <span style="color: rgba(0, 0, 255, 1)">if</span> (HashCode(entry.Key) = HashCode(AKey)) <span style="color: rgba(0, 0, 255, 1)">and</span> SameText(entry.Key, AKey) <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">317</span>       <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">318</span>         Result :=<span style="color: rgba(0, 0, 0, 1)"> entry;
</span><span style="color: rgba(0, 128, 128, 1)">319</span> <span style="color: rgba(0, 0, 0, 1)">      Exit;
</span><span style="color: rgba(0, 128, 128, 1)">320</span>       <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">321</span>       entry :=<span style="color: rgba(0, 0, 0, 1)"> entry.Next;
</span><span style="color: rgba(0, 128, 128, 1)">322</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">323</span>   Result :=<span style="color: rgba(0, 0, 0, 1)"> entry;
</span><span style="color: rgba(0, 128, 128, 1)">324</span>   <span style="color: rgba(0, 0, 255, 1)">except</span>
<span style="color: rgba(0, 128, 128, 1)">325</span>   Result := <span style="color: rgba(0, 0, 255, 1)">nil</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">326</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">327</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">328</span>
<span style="color: rgba(0, 128, 128, 1)">329</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span> THashMap.Remove(AKey: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">330</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)">331</span> <span style="color: rgba(0, 0, 0, 1)">index: Integer;
</span><span style="color: rgba(0, 128, 128, 1)">332</span> <span style="color: rgba(0, 0, 0, 1)">pre, entry: THashEntry;
</span><span style="color: rgba(0, 128, 128, 1)">333</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">334</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> AKey = <span style="color: rgba(128, 0, 0, 1)">''</span> <span style="color: rgba(0, 0, 255, 1)">then</span><span style="color: rgba(0, 0, 0, 1)"> Exit;
</span><span style="color: rgba(0, 128, 128, 1)">335</span>
<span style="color: rgba(0, 128, 128, 1)">336</span>   index :=<span style="color: rgba(0, 0, 0, 1)"> IndexOf(AKey);
</span><span style="color: rgba(0, 128, 128, 1)">337</span>   pre := <span style="color: rgba(0, 0, 255, 1)">nil</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">338</span>   entry :=<span style="color: rgba(0, 0, 0, 1)"> FTable;
</span><span style="color: rgba(0, 128, 128, 1)">339</span>   <span style="color: rgba(0, 0, 255, 1)">while</span> entry &lt;&gt; <span style="color: rgba(0, 0, 255, 1)">nil</span> <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)">340</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">341</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> (HashCode(entry.Key) = HashCode(AKey)) <span style="color: rgba(0, 0, 255, 1)">and</span> SameText(entry.Key, AKey) <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">342</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">343</span>       <span style="color: rgba(0, 0, 255, 1)">if</span> pre = <span style="color: rgba(0, 0, 255, 1)">nil</span> <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">344</span>         FTable :=<span style="color: rgba(0, 0, 0, 1)"> entry.Next
</span><span style="color: rgba(0, 128, 128, 1)">345</span>       <span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(0, 128, 128, 1)">346</span>         pre.Next :=<span style="color: rgba(0, 0, 0, 1)"> entry.Next;
</span><span style="color: rgba(0, 128, 128, 1)">347</span>
<span style="color: rgba(0, 128, 128, 1)">348</span> <span style="color: rgba(0, 0, 0, 1)">      Dec(FCount);
</span><span style="color: rgba(0, 128, 128, 1)">349</span> <span style="color: rgba(0, 0, 0, 1)">      Exit;
</span><span style="color: rgba(0, 128, 128, 1)">350</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">351</span>   pre :=<span style="color: rgba(0, 0, 0, 1)"> entry;
</span><span style="color: rgba(0, 128, 128, 1)">352</span>   entry :=<span style="color: rgba(0, 0, 0, 1)"> entry.Next;
</span><span style="color: rgba(0, 128, 128, 1)">353</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">354</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">355</span>
<span style="color: rgba(0, 128, 128, 1)">356</span>
<span style="color: rgba(0, 128, 128, 1)">357</span> <span style="color: rgba(0, 0, 255, 1)">function</span> THashMap.ContainsKey(AKey: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">): Boolean;
</span><span style="color: rgba(0, 128, 128, 1)">358</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">359</span>   Result :=<span style="color: rgba(0, 0, 0, 1)"> False;
</span><span style="color: rgba(0, 128, 128, 1)">360</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> AKey = <span style="color: rgba(128, 0, 0, 1)">''</span> <span style="color: rgba(0, 0, 255, 1)">then</span><span style="color: rgba(0, 0, 0, 1)"> Exit;
</span><span style="color: rgba(0, 128, 128, 1)">361</span>   Result := GetEntry(aKey) &lt;&gt; <span style="color: rgba(0, 0, 255, 1)">nil</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">362</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">363</span>
<span style="color: rgba(0, 128, 128, 1)">364</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> THashMap.Clear;
</span><span style="color: rgba(0, 128, 128, 1)">365</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)">366</span> <span style="color: rgba(0, 0, 0, 1)">I: Integer;
</span><span style="color: rgba(0, 128, 128, 1)">367</span> <span style="color: rgba(0, 0, 0, 1)">firstEntry, pre, Entry: THashEntry;
</span><span style="color: rgba(0, 128, 128, 1)">368</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">369</span>   <span style="color: rgba(0, 0, 255, 1)">for</span> I := <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(0, 0, 255, 1)">to</span> Length(FTable) - <span style="color: rgba(128, 0, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)">370</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">371</span>   firstEntry :=<span style="color: rgba(0, 0, 0, 1)"> FTable;
</span><span style="color: rgba(0, 128, 128, 1)">372</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> firstEntry &lt;&gt; <span style="color: rgba(0, 0, 255, 1)">nil</span> <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">373</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">374</span>       <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 有链表</span>
<span style="color: rgba(0, 128, 128, 1)">375</span>       pre := <span style="color: rgba(0, 0, 255, 1)">nil</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">376</span>       entry :=<span style="color: rgba(0, 0, 0, 1)"> firstEntry.Next;
</span><span style="color: rgba(0, 128, 128, 1)">377</span>       <span style="color: rgba(0, 0, 255, 1)">while</span> entry &lt;&gt; <span style="color: rgba(0, 0, 255, 1)">nil</span> <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)">378</span>       <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">379</span>         pre :=<span style="color: rgba(0, 0, 0, 1)"> Entry;
</span><span style="color: rgba(0, 128, 128, 1)">380</span>         Entry :=<span style="color: rgba(0, 0, 0, 1)"> pre.Next;
</span><span style="color: rgba(0, 128, 128, 1)">381</span>         pre.Next := <span style="color: rgba(0, 0, 255, 1)">nil</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">382</span>         <span style="color: rgba(0, 0, 255, 1)">FreeAndNil</span><span style="color: rgba(0, 0, 0, 1)">(pre);
</span><span style="color: rgba(0, 128, 128, 1)">383</span>       <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">384</span>       <span style="color: rgba(0, 0, 255, 1)">FreeAndNil</span><span style="color: rgba(0, 0, 0, 1)">(firstEntry);
</span><span style="color: rgba(0, 128, 128, 1)">385</span>       FTable := <span style="color: rgba(0, 0, 255, 1)">nil</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">386</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">387</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">388</span>
<span style="color: rgba(0, 128, 128, 1)">389</span>   SetLength(FTable, <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">390</span>   FCount := <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">391</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">392</span>
<span style="color: rgba(0, 128, 128, 1)">393</span> <span style="color: rgba(0, 0, 255, 1)">function</span> THashMap.ToString(): <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">394</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)">395</span> <span style="color: rgba(0, 0, 0, 1)">I, iPadLeft: Integer;
</span><span style="color: rgba(0, 128, 128, 1)">396</span> <span style="color: rgba(0, 0, 0, 1)">entry: THashEntry;
</span><span style="color: rgba(0, 128, 128, 1)">397</span>   sValue: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">398</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>                     
<span style="color: rgba(0, 128, 128, 1)">399</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> <span style="color: rgba(0, 0, 255, 1)">not</span> Assigned(FTable) <span style="color: rgba(0, 0, 255, 1)">then</span><span style="color: rgba(0, 0, 0, 1)"> Exit;
</span><span style="color: rgba(0, 128, 128, 1)">400</span>   Result := Format(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Size: %d, capacity: %d, Resize: %d;</span><span style="color: rgba(128, 0, 0, 1)">'</span>#<span style="color: rgba(128, 0, 128, 1)">10</span>#<span style="color: rgba(128, 0, 128, 1)">13</span><span style="color: rgba(0, 0, 0, 1)">, );
</span><span style="color: rgba(0, 128, 128, 1)">401</span>   Result := Result + #<span style="color: rgba(128, 0, 128, 1)">13</span>#<span style="color: rgba(128, 0, 128, 1)">10</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">402</span>   <span style="color: rgba(0, 0, 255, 1)">for</span> I := <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(0, 0, 255, 1)">to</span> Length(FTable) - <span style="color: rgba(128, 0, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)">403</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">404</span>   entry :=<span style="color: rgba(0, 0, 0, 1)"> FTable;
</span><span style="color: rgba(0, 128, 128, 1)">405</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> entry = <span style="color: rgba(0, 0, 255, 1)">nil</span> <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">406</span>       Result := Result + Format(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">a[%d] = nil</span><span style="color: rgba(128, 0, 0, 1)">'</span>#<span style="color: rgba(128, 0, 128, 1)">13</span>#<span style="color: rgba(128, 0, 128, 1)">10</span><span style="color: rgba(0, 0, 0, 1)">, )
</span><span style="color: rgba(0, 128, 128, 1)">407</span>   <span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(0, 128, 128, 1)">408</span>       Result := Result + Format(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">a[%d]</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, );
</span><span style="color: rgba(0, 128, 128, 1)">409</span>
<span style="color: rgba(0, 128, 128, 1)">410</span>   iPadLeft := Length(Format(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">a[%d]</span><span style="color: rgba(128, 0, 0, 1)">'</span>, )) + <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">411</span>   <span style="color: rgba(0, 0, 255, 1)">while</span> entry &lt;&gt; <span style="color: rgba(0, 0, 255, 1)">nil</span> <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)">412</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">413</span>       <span style="color: rgba(0, 0, 255, 1)">case</span> TVarData(entry.Value).VType <span style="color: rgba(0, 0, 255, 1)">of</span>
<span style="color: rgba(0, 128, 128, 1)">414</span>         varString: sValue := <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">''</span><span style="color: rgba(128, 0, 0, 1)">'</span> + entry.Value + <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">''</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">415</span>       <span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(0, 128, 128, 1)">416</span>         sValue := VarToStrDef(entry.Value, <span style="color: rgba(128, 0, 0, 1)">''</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">417</span>       <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">418</span>
<span style="color: rgba(0, 128, 128, 1)">419</span>
<span style="color: rgba(0, 128, 128, 1)">420</span>       <span style="color: rgba(0, 0, 255, 1)">if</span> entry &lt;&gt; FTable <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">421</span>         Result := Result + DupeString(<span style="color: rgba(128, 0, 0, 1)">'</span> <span style="color: rgba(128, 0, 0, 1)">'</span>, iPadLeft) + <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)"> -&gt; </span><span style="color: rgba(128, 0, 0, 1)">'</span> + entry.Key + <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)"> = </span><span style="color: rgba(128, 0, 0, 1)">'</span> +<span style="color: rgba(0, 0, 0, 1)">sValue
</span><span style="color: rgba(0, 128, 128, 1)">422</span>       <span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(0, 128, 128, 1)">423</span>         Result := Result + entry.Key + <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)"> = </span><span style="color: rgba(128, 0, 0, 1)">'</span> +<span style="color: rgba(0, 0, 0, 1)"> sValue;
</span><span style="color: rgba(0, 128, 128, 1)">424</span>
<span style="color: rgba(0, 128, 128, 1)">425</span>       entry :=<span style="color: rgba(0, 0, 0, 1)"> entry.Next;
</span><span style="color: rgba(0, 128, 128, 1)">426</span>       Result := Result + #<span style="color: rgba(128, 0, 128, 1)">13</span>#<span style="color: rgba(128, 0, 128, 1)">10</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">427</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">428</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">429</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">430</span>
<span style="color: rgba(0, 128, 128, 1)">431</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> THashMap.ToList: TList;
</span><span style="color: rgba(0, 128, 128, 1)">432</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)">433</span> <span style="color: rgba(0, 0, 0, 1)">I: Integer;
</span><span style="color: rgba(0, 128, 128, 1)">434</span> <span style="color: rgba(0, 0, 0, 1)">e: THashEntry;
</span><span style="color: rgba(0, 128, 128, 1)">435</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">436</span>   Result := <span style="color: rgba(0, 0, 255, 1)">nil</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">437</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> Length(FTable) = <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">438</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">439</span> <span style="color: rgba(0, 0, 0, 1)">    Exit;
</span><span style="color: rgba(0, 128, 128, 1)">440</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">441</span>
<span style="color: rgba(0, 128, 128, 1)">442</span>   Result := TList.<span style="color: rgba(0, 0, 255, 1)">Create</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">443</span>   <span style="color: rgba(0, 0, 255, 1)">for</span> I := Low(FTable) <span style="color: rgba(0, 0, 255, 1)">to</span> High(FTable) <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)">444</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">445</span>   e :=<span style="color: rgba(0, 0, 0, 1)"> FTable;
</span><span style="color: rgba(0, 128, 128, 1)">446</span>   <span style="color: rgba(0, 0, 255, 1)">while</span> e &lt;&gt; <span style="color: rgba(0, 0, 255, 1)">nil</span> <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)">447</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">448</span> <span style="color: rgba(0, 0, 0, 1)">      Result.Add(e);
</span><span style="color: rgba(0, 128, 128, 1)">449</span>       e :=<span style="color: rgba(0, 0, 0, 1)"> e.Next;
</span><span style="color: rgba(0, 128, 128, 1)">450</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">451</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">452</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">453</span>
<span style="color: rgba(0, 128, 128, 1)">454</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> THashMap.GetEntrySet: TEntrySet;
</span><span style="color: rgba(0, 128, 128, 1)">455</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)">456</span> <span style="color: rgba(0, 0, 0, 1)">I: Integer;
</span><span style="color: rgba(0, 128, 128, 1)">457</span> <span style="color: rgba(0, 0, 0, 1)">e: THashEntry;
</span><span style="color: rgba(0, 128, 128, 1)">458</span> <span style="color: rgba(0, 0, 0, 1)">aList: TList;
</span><span style="color: rgba(0, 128, 128, 1)">459</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">460</span>   Result := <span style="color: rgba(0, 0, 255, 1)">nil</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">461</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> Length(FTable) = <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">462</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">463</span> <span style="color: rgba(0, 0, 0, 1)">    Exit;
</span><span style="color: rgba(0, 128, 128, 1)">464</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">465</span>
<span style="color: rgba(0, 128, 128, 1)">466</span>   <span style="color: rgba(0, 0, 255, 1)">try</span>
<span style="color: rgba(0, 128, 128, 1)">467</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 1、先获取到数组和链表中所有Entry对象</span>
<span style="color: rgba(0, 128, 128, 1)">468</span>   aList :=<span style="color: rgba(0, 0, 0, 1)"> ToList;
</span><span style="color: rgba(0, 128, 128, 1)">469</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 2、把得到的Entry对象加入到TEntrySet中</span>
<span style="color: rgba(0, 128, 128, 1)">470</span> <span style="color: rgba(0, 0, 0, 1)">    SetLength(Result, aList.Count);
</span><span style="color: rgba(0, 128, 128, 1)">471</span>   <span style="color: rgba(0, 0, 255, 1)">for</span> I := <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(0, 0, 255, 1)">to</span> aList.Count - <span style="color: rgba(128, 0, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)">472</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">473</span>       Result :=<span style="color: rgba(0, 0, 0, 1)"> aList;
</span><span style="color: rgba(0, 128, 128, 1)">474</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">475</span>   <span style="color: rgba(0, 0, 255, 1)">finally</span>
<span style="color: rgba(0, 128, 128, 1)">476</span>   <span style="color: rgba(0, 0, 255, 1)">FreeAndNil</span><span style="color: rgba(0, 0, 0, 1)">(aList);
</span><span style="color: rgba(0, 128, 128, 1)">477</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">478</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">479</span>
<span style="color: rgba(0, 128, 128, 1)">480</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> THashMap.Add(AMap: THashMap);
</span><span style="color: rgba(0, 128, 128, 1)">481</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)">482</span> <span style="color: rgba(0, 0, 0, 1)">I: Integer;
</span><span style="color: rgba(0, 128, 128, 1)">483</span> <span style="color: rgba(0, 0, 0, 1)">e: THashEntry;
</span><span style="color: rgba(0, 128, 128, 1)">484</span> <span style="color: rgba(0, 0, 0, 1)">aSet: TEntrySet;
</span><span style="color: rgba(0, 128, 128, 1)">485</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">486</span>   aSet :=<span style="color: rgba(0, 0, 0, 1)"> AMap.GetEntrySet;
</span><span style="color: rgba(0, 128, 128, 1)">487</span>   <span style="color: rgba(0, 0, 255, 1)">for</span> I := <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(0, 0, 255, 1)">to</span> Length(aSet) - <span style="color: rgba(128, 0, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)">488</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">489</span> <span style="color: rgba(0, 0, 0, 1)">    Add(aSet.Key, aSet.Value);
</span><span style="color: rgba(0, 128, 128, 1)">490</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">491</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">492</span>
<span style="color: rgba(0, 128, 128, 1)">493</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 插入对象</span>
<span style="color: rgba(0, 128, 128, 1)">494</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span> THashMap.AddObject(AKey: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">; AValue: TObject);
</span><span style="color: rgba(0, 128, 128, 1)">495</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">496</span> <span style="color: rgba(0, 0, 0, 1)">Add(AKey, Integer(AValue), True);
</span><span style="color: rgba(0, 128, 128, 1)">497</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">498</span>
<span style="color: rgba(0, 128, 128, 1)">499</span> <span style="color: rgba(0, 0, 255, 1)">function</span> THashMap.GetObject(AKey: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">): TObject;
</span><span style="color: rgba(0, 128, 128, 1)">500</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">501</span>   Result :=<span style="color: rgba(0, 0, 0, 1)"> TObject(Integer(Get(AKey)));
</span><span style="color: rgba(0, 128, 128, 1)">502</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">503</span>
<span style="color: rgba(0, 128, 128, 1)">504</span>
<span style="color: rgba(0, 128, 128, 1)">505</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> key排序</span>
<span style="color: rgba(0, 128, 128, 1)">506</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> SortCompareByKey(Item1, Item2: Pointer): Integer;
</span><span style="color: rgba(0, 128, 128, 1)">507</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">508</span>   Result :=<span style="color: rgba(0, 0, 0, 1)"> AnsiCompareStr(THashEntry(item1).Key, THashEntry(Item2).Key);
</span><span style="color: rgba(0, 128, 128, 1)">509</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">510</span>
<span style="color: rgba(0, 128, 128, 1)">511</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Value排序</span>
<span style="color: rgba(0, 128, 128, 1)">512</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> SortCompareByValue(Item1, Item2: Pointer): Integer;
</span><span style="color: rgba(0, 128, 128, 1)">513</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">514</span>   Result :=<span style="color: rgba(0, 0, 0, 1)"> AnsiCompareStr(THashEntry(item1).Value, THashEntry(Item2).Value);
</span><span style="color: rgba(0, 128, 128, 1)">515</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">516</span>
<span style="color: rgba(0, 128, 128, 1)">517</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> KeyValue排序</span>
<span style="color: rgba(0, 128, 128, 1)">518</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> SortCompareByKeyValue(Item1, Item2: Pointer): Integer;
</span><span style="color: rgba(0, 128, 128, 1)">519</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">520</span>   Result := AnsiCompareStr(THashEntry(item1).Key + VarToStrDef(THashEntry(item1).Value, <span style="color: rgba(128, 0, 0, 1)">''</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">521</span>   , THashEntry(item2).Key + VarToStrDef(THashEntry(Item2).Value, <span style="color: rgba(128, 0, 0, 1)">''</span><span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 128, 128, 1)">522</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">523</span>
<span style="color: rgba(0, 128, 128, 1)">524</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> THashMap.Sort(ASortType: TSortType): TEntrySet;
</span><span style="color: rgba(0, 128, 128, 1)">525</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)">526</span> <span style="color: rgba(0, 0, 0, 1)">I: Integer;
</span><span style="color: rgba(0, 128, 128, 1)">527</span> <span style="color: rgba(0, 0, 0, 1)">aSortCompare: TListSortCompare;
</span><span style="color: rgba(0, 128, 128, 1)">528</span> <span style="color: rgba(0, 0, 0, 1)">aList: TList;
</span><span style="color: rgba(0, 128, 128, 1)">529</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">530</span>   aList :=<span style="color: rgba(0, 0, 0, 1)"> ToList;
</span><span style="color: rgba(0, 128, 128, 1)">531</span>   <span style="color: rgba(0, 0, 255, 1)">try</span>
<span style="color: rgba(0, 128, 128, 1)">532</span>   <span style="color: rgba(0, 0, 255, 1)">case</span> ASortType <span style="color: rgba(0, 0, 255, 1)">of</span>
<span style="color: rgba(0, 128, 128, 1)">533</span> <span style="color: rgba(0, 0, 0, 1)">      stKey:
</span><span style="color: rgba(0, 128, 128, 1)">534</span>         aSortCompare :=<span style="color: rgba(0, 0, 0, 1)"> SortCompareByKey;
</span><span style="color: rgba(0, 128, 128, 1)">535</span> <span style="color: rgba(0, 0, 0, 1)">      stValue:
</span><span style="color: rgba(0, 128, 128, 1)">536</span>         aSortCompare :=<span style="color: rgba(0, 0, 0, 1)"> SortCompareByValue;
</span><span style="color: rgba(0, 128, 128, 1)">537</span>   <span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(0, 128, 128, 1)">538</span>       aSortCompare :=<span style="color: rgba(0, 0, 0, 1)"> SortCompareByKeyValue;
</span><span style="color: rgba(0, 128, 128, 1)">539</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">540</span> <span style="color: rgba(0, 0, 0, 1)">    aList.Sort(aSortCompare);
</span><span style="color: rgba(0, 128, 128, 1)">541</span>
<span style="color: rgba(0, 128, 128, 1)">542</span> <span style="color: rgba(0, 0, 0, 1)">    SetLength(Result, aList.Count);
</span><span style="color: rgba(0, 128, 128, 1)">543</span>   <span style="color: rgba(0, 0, 255, 1)">for</span> I := <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(0, 0, 255, 1)">to</span> aList.Count - <span style="color: rgba(128, 0, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)">544</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">545</span>       Result :=<span style="color: rgba(0, 0, 0, 1)"> aList;
</span><span style="color: rgba(0, 128, 128, 1)">546</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">547</span>   <span style="color: rgba(0, 0, 255, 1)">finally</span>
<span style="color: rgba(0, 128, 128, 1)">548</span>   <span style="color: rgba(0, 0, 255, 1)">FreeAndNil</span><span style="color: rgba(0, 0, 0, 1)">(aList);
</span><span style="color: rgba(0, 128, 128, 1)">549</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">550</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">551</span>
<span style="color: rgba(0, 128, 128, 1)">552</span>
<span style="color: rgba(0, 128, 128, 1)">553</span>
<span style="color: rgba(0, 128, 128, 1)">554</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> THashMap.GetItems(Index: Integer): THashEntry;
</span><span style="color: rgba(0, 128, 128, 1)">555</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">556</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> (Index &lt; <span style="color: rgba(128, 0, 128, 1)">0</span>) <span style="color: rgba(0, 0, 255, 1)">or</span> (Index &gt;= FCount) <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">557</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">558</span>   Result := <span style="color: rgba(0, 0, 255, 1)">nil</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">559</span> <span style="color: rgba(0, 0, 0, 1)">    Exit;
</span><span style="color: rgba(0, 128, 128, 1)">560</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">561</span>   Result :=<span style="color: rgba(0, 0, 0, 1)"> FTable;
</span><span style="color: rgba(0, 128, 128, 1)">562</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">563</span>
<span style="color: rgba(0, 128, 128, 1)">564</span> <span style="color: rgba(0, 0, 255, 1)">end</span>.</pre>
</div>
<p>&nbsp;</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)">*******************************************************</span><span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 128, 0, 1)">{</span>                                                       <span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 128, 1)"> 3</span> <span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)">       Delphi HashMap                                  </span><span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 128, 0, 1)">{</span>                                                       <span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 128, 1)"> 5</span> <span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)">       版权所有 (C) 2018 hsoft                        </span><span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 128, 0, 1)">{</span>                                                       <span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 128, 0, 1)">{</span>                                                       <span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)"> Author: MarkWu    Email: 77910086@qq.com            </span><span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 128, 1)"> 9</span> <span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)"> Date:   2018-01-02 14:17:00                           </span><span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)"> Desc:   HashMap                                       </span><span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 128, 1)">11</span> <span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)">*******************************************************</span><span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 128, 1)">12</span>
<span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(0, 0, 255, 1)">unit</span><span style="color: rgba(0, 0, 0, 1)"> uHashEntry;
</span><span style="color: rgba(0, 128, 128, 1)">14</span>
<span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 0, 255, 1)">interface</span>
<span style="color: rgba(0, 128, 128, 1)">16</span>
<span style="color: rgba(0, 128, 128, 1)">17</span> <span style="color: rgba(0, 0, 255, 1)">uses</span>
<span style="color: rgba(0, 128, 128, 1)">18</span> <span style="color: rgba(0, 0, 0, 1)">Variants;
</span><span style="color: rgba(0, 128, 128, 1)">19</span>
<span style="color: rgba(0, 128, 128, 1)">20</span> <span style="color: rgba(0, 0, 255, 1)">type</span>
<span style="color: rgba(0, 128, 128, 1)">21</span>   THashEntry = <span style="color: rgba(0, 0, 255, 1)">class</span>
<span style="color: rgba(0, 128, 128, 1)">22</span>   <span style="color: rgba(0, 0, 255, 1)">private</span>
<span style="color: rgba(0, 128, 128, 1)">23</span>   FKey: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">24</span> <span style="color: rgba(0, 0, 0, 1)">    FValue: Variant;
</span><span style="color: rgba(0, 128, 128, 1)">25</span> <span style="color: rgba(0, 0, 0, 1)">    FNext: THashEntry;
</span><span style="color: rgba(0, 128, 128, 1)">26</span> <span style="color: rgba(0, 0, 0, 1)">    FIsObj: Boolean;
</span><span style="color: rgba(0, 128, 128, 1)">27</span>   <span style="color: rgba(0, 0, 255, 1)">procedure</span> SetValue(<span style="color: rgba(0, 0, 255, 1)">const</span><span style="color: rgba(0, 0, 0, 1)"> Value: Variant);
</span><span style="color: rgba(0, 128, 128, 1)">28</span>   <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> GetValue: Variant;
</span><span style="color: rgba(0, 128, 128, 1)">29</span>   <span style="color: rgba(0, 0, 255, 1)">public</span>
<span style="color: rgba(0, 128, 128, 1)">30</span>   <span style="color: rgba(0, 0, 255, 1)">constructor</span> <span style="color: rgba(0, 0, 255, 1)">Create</span>(AKey: <span style="color: rgba(0, 0, 255, 1)">string</span>; AValue: Variant; ANext: THashEntry; AIsObj: Boolean =<span style="color: rgba(0, 0, 0, 1)"> False);
</span><span style="color: rgba(0, 128, 128, 1)">31</span>
<span style="color: rgba(0, 128, 128, 1)">32</span>   <span style="color: rgba(0, 0, 255, 1)">function</span> ToString(): <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">33</span>   <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> HashCode: Integer;
</span><span style="color: rgba(0, 128, 128, 1)">34</span>
<span style="color: rgba(0, 128, 128, 1)">35</span>   <span style="color: rgba(0, 0, 255, 1)">property</span> Key: <span style="color: rgba(0, 0, 255, 1)">string</span> <span style="color: rgba(0, 0, 255, 1)">read</span> FKey <span style="color: rgba(0, 0, 255, 1)">write</span><span style="color: rgba(0, 0, 0, 1)"> FKey;
</span><span style="color: rgba(0, 128, 128, 1)">36</span>   <span style="color: rgba(0, 0, 255, 1)">property</span> Value: Variant <span style="color: rgba(0, 0, 255, 1)">read</span> GetValue <span style="color: rgba(0, 0, 255, 1)">write</span><span style="color: rgba(0, 0, 0, 1)"> SetValue;
</span><span style="color: rgba(0, 128, 128, 1)">37</span>   <span style="color: rgba(0, 0, 255, 1)">property</span> Next: THashEntry <span style="color: rgba(0, 0, 255, 1)">read</span> FNext <span style="color: rgba(0, 0, 255, 1)">write</span><span style="color: rgba(0, 0, 0, 1)"> FNext;
</span><span style="color: rgba(0, 128, 128, 1)">38</span>   <span style="color: rgba(0, 0, 255, 1)">property</span> IsObj: Boolean <span style="color: rgba(0, 0, 255, 1)">read</span><span style="color: rgba(0, 0, 0, 1)"> FIsObj;
</span><span style="color: rgba(0, 128, 128, 1)">39</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">40</span>
<span style="color: rgba(0, 128, 128, 1)">41</span> <span style="color: rgba(0, 0, 255, 1)">implementation</span>
<span style="color: rgba(0, 128, 128, 1)">42</span>
<span style="color: rgba(0, 128, 128, 1)">43</span> <span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)"> THashEntry </span><span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 128, 1)">44</span>
<span style="color: rgba(0, 128, 128, 1)">45</span> <span style="color: rgba(0, 0, 255, 1)">constructor</span> THashEntry.<span style="color: rgba(0, 0, 255, 1)">Create</span>(AKey: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">; AValue: Variant; ANext: THashEntry; AIsObj: Boolean);
</span><span style="color: rgba(0, 128, 128, 1)">46</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">47</span>   FKey :=<span style="color: rgba(0, 0, 0, 1)"> AKey;
</span><span style="color: rgba(0, 128, 128, 1)">48</span>   FValue :=<span style="color: rgba(0, 0, 0, 1)"> AValue;
</span><span style="color: rgba(0, 128, 128, 1)">49</span>   FIsObj :=<span style="color: rgba(0, 0, 0, 1)"> AIsObj;
</span><span style="color: rgba(0, 128, 128, 1)">50</span>   FNext:=<span style="color: rgba(0, 0, 0, 1)"> ANext;
</span><span style="color: rgba(0, 128, 128, 1)">51</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">52</span>
<span style="color: rgba(0, 128, 128, 1)">53</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> THashEntry.HashCode: Integer;
</span><span style="color: rgba(0, 128, 128, 1)">54</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">55</span>   Result :=<span style="color: rgba(0, 0, 0, 1)"> Integer(Self);
</span><span style="color: rgba(0, 128, 128, 1)">56</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">57</span>
<span style="color: rgba(0, 128, 128, 1)">58</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> THashEntry.GetValue: Variant;
</span><span style="color: rgba(0, 128, 128, 1)">59</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">60</span>   Result :=<span style="color: rgba(0, 0, 0, 1)"> FValue;
</span><span style="color: rgba(0, 128, 128, 1)">61</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">62</span>
<span style="color: rgba(0, 128, 128, 1)">63</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span> THashEntry.SetValue(<span style="color: rgba(0, 0, 255, 1)">const</span><span style="color: rgba(0, 0, 0, 1)"> Value: Variant);
</span><span style="color: rgba(0, 128, 128, 1)">64</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">65</span>   FValue :=<span style="color: rgba(0, 0, 0, 1)"> Value;
</span><span style="color: rgba(0, 128, 128, 1)">66</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">67</span>
<span style="color: rgba(0, 128, 128, 1)">68</span> <span style="color: rgba(0, 0, 255, 1)">function</span> THashEntry.ToString: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">69</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">70</span>   Result := FKey + <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">=</span><span style="color: rgba(128, 0, 0, 1)">'</span> + VarToStrDef(FValue, <span style="color: rgba(128, 0, 0, 1)">''</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">71</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">72</span>
<span style="color: rgba(0, 128, 128, 1)">73</span> <span style="color: rgba(0, 0, 255, 1)">end</span>.</pre>
</div>
<p>测试效果图</p>
<p>&nbsp;<img src="https://img2020.cnblogs.com/blog/40151/202009/40151-20200902123001174-620424926.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;HashMap, StringList, HashedStringList的性能比较, HashMap的性能比较稳定,保持O(1), 而HashedStringList第1次查找时很慢,后面就稳定了,不知啥原因,没有去跟踪它代码。</p>
<p><img src="https://img2020.cnblogs.com/blog/40151/202009/40151-20200902123100451-1357733111.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>测试程序源码:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> Form1: TForm1
Left </span>= <span style="color: rgba(128, 0, 128, 1)">263</span><span style="color: rgba(0, 0, 0, 1)">
Top </span>= <span style="color: rgba(128, 0, 128, 1)">169</span><span style="color: rgba(0, 0, 0, 1)">
Width </span>= <span style="color: rgba(128, 0, 128, 1)">787</span><span style="color: rgba(0, 0, 0, 1)">
Height </span>= <span style="color: rgba(128, 0, 128, 1)">518</span><span style="color: rgba(0, 0, 0, 1)">
Caption </span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">HashMap Demo -- Author: MarkWuQQ:77910086</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
Color </span>=<span style="color: rgba(0, 0, 0, 1)"> clBtnFace
Font.Charset </span>=<span style="color: rgba(0, 0, 0, 1)"> DEFAULT_CHARSET
Font.Color </span>=<span style="color: rgba(0, 0, 0, 1)"> clWindowText
Font.Height </span>= -<span style="color: rgba(128, 0, 128, 1)">11</span><span style="color: rgba(0, 0, 0, 1)">
Font.Name </span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">MS Sans Serif</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
Font.Style </span>=<span style="color: rgba(0, 0, 0, 1)"> []
OldCreateOrder </span>=<span style="color: rgba(0, 0, 0, 1)"> False
OnCreate </span>=<span style="color: rgba(0, 0, 0, 1)"> FormCreate
PixelsPerInch </span>= <span style="color: rgba(128, 0, 128, 1)">96</span><span style="color: rgba(0, 0, 0, 1)">
TextHeight </span>= <span style="color: rgba(128, 0, 128, 1)">13</span>
<span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> Label1: TLabel
    Left </span>= <span style="color: rgba(128, 0, 128, 1)">237</span><span style="color: rgba(0, 0, 0, 1)">
    Top </span>= <span style="color: rgba(128, 0, 128, 1)">90</span><span style="color: rgba(0, 0, 0, 1)">
    Width </span>= <span style="color: rgba(128, 0, 128, 1)">18</span><span style="color: rgba(0, 0, 0, 1)">
    Height </span>= <span style="color: rgba(128, 0, 128, 1)">13</span><span style="color: rgba(0, 0, 0, 1)">
    Caption </span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Key</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(0, 0, 255, 1)">end</span>
<span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> Label2: TLabel
    Left </span>= <span style="color: rgba(128, 0, 128, 1)">237</span><span style="color: rgba(0, 0, 0, 1)">
    Top </span>= <span style="color: rgba(128, 0, 128, 1)">119</span><span style="color: rgba(0, 0, 0, 1)">
    Width </span>= <span style="color: rgba(128, 0, 128, 1)">27</span><span style="color: rgba(0, 0, 0, 1)">
    Height </span>= <span style="color: rgba(128, 0, 128, 1)">13</span><span style="color: rgba(0, 0, 0, 1)">
    Caption </span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Value</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(0, 0, 255, 1)">end</span>
<span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> Label3: TLabel
    Left </span>= <span style="color: rgba(128, 0, 128, 1)">231</span><span style="color: rgba(0, 0, 0, 1)">
    Top </span>= <span style="color: rgba(128, 0, 128, 1)">168</span><span style="color: rgba(0, 0, 0, 1)">
    Width </span>= <span style="color: rgba(128, 0, 128, 1)">34</span><span style="color: rgba(0, 0, 0, 1)">
    Height </span>= <span style="color: rgba(128, 0, 128, 1)">13</span><span style="color: rgba(0, 0, 0, 1)">
    Caption </span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Serach</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(0, 0, 255, 1)">end</span>
<span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> Label4: TLabel
    Left </span>= <span style="color: rgba(128, 0, 128, 1)">240</span><span style="color: rgba(0, 0, 0, 1)">
    Top </span>= <span style="color: rgba(128, 0, 128, 1)">348</span><span style="color: rgba(0, 0, 0, 1)">
    Width </span>= <span style="color: rgba(128, 0, 128, 1)">14</span><span style="color: rgba(0, 0, 0, 1)">
    Height </span>= <span style="color: rgba(128, 0, 128, 1)">13</span><span style="color: rgba(0, 0, 0, 1)">
    Caption </span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">N: </span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(0, 0, 255, 1)">end</span>
<span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> Label5: TLabel
    Left </span>= <span style="color: rgba(128, 0, 128, 1)">365</span><span style="color: rgba(0, 0, 0, 1)">
    Top </span>= <span style="color: rgba(128, 0, 128, 1)">347</span><span style="color: rgba(0, 0, 0, 1)">
    Width </span>= <span style="color: rgba(128, 0, 128, 1)">17</span><span style="color: rgba(0, 0, 0, 1)">
    Height </span>= <span style="color: rgba(128, 0, 128, 1)">13</span><span style="color: rgba(0, 0, 0, 1)">
    Caption </span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Get</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(0, 0, 255, 1)">end</span>
<span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> Button1: TButton
    Left </span>= <span style="color: rgba(128, 0, 128, 1)">257</span><span style="color: rgba(0, 0, 0, 1)">
    Top </span>= <span style="color: rgba(128, 0, 128, 1)">11</span><span style="color: rgba(0, 0, 0, 1)">
    Width </span>= <span style="color: rgba(128, 0, 128, 1)">75</span><span style="color: rgba(0, 0, 0, 1)">
    Height </span>= <span style="color: rgba(128, 0, 128, 1)">25</span><span style="color: rgba(0, 0, 0, 1)">
    Caption </span>= #<span style="color: rgba(128, 0, 128, 1)">21021</span>#<span style="color: rgba(128, 0, 128, 1)">22987</span>#<span style="color: rgba(128, 0, 128, 1)">21270</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Map</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
    TabOrder </span>= <span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">
    OnClick </span>=<span style="color: rgba(0, 0, 0, 1)"> Button1Click
</span><span style="color: rgba(0, 0, 255, 1)">end</span>
<span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> Memo1: TMemo
    Left </span>= <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">
    Top </span>= <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">
    Width </span>= <span style="color: rgba(128, 0, 128, 1)">225</span><span style="color: rgba(0, 0, 0, 1)">
    Height </span>= <span style="color: rgba(128, 0, 128, 1)">480</span><span style="color: rgba(0, 0, 0, 1)">
    Align </span>=<span style="color: rgba(0, 0, 0, 1)"> alLeft
    ScrollBars </span>=<span style="color: rgba(0, 0, 0, 1)"> ssVertical
    TabOrder </span>= <span style="color: rgba(128, 0, 128, 1)">0</span>
<span style="color: rgba(0, 0, 255, 1)">end</span>
<span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> Button2: TButton
    Left </span>= <span style="color: rgba(128, 0, 128, 1)">364</span><span style="color: rgba(0, 0, 0, 1)">
    Top </span>= <span style="color: rgba(128, 0, 128, 1)">163</span><span style="color: rgba(0, 0, 0, 1)">
    Width </span>= <span style="color: rgba(128, 0, 128, 1)">75</span><span style="color: rgba(0, 0, 0, 1)">
    Height </span>= <span style="color: rgba(128, 0, 128, 1)">25</span><span style="color: rgba(0, 0, 0, 1)">
    Caption </span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Get</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
    TabOrder </span>= <span style="color: rgba(128, 0, 128, 1)">8</span><span style="color: rgba(0, 0, 0, 1)">
    OnClick </span>=<span style="color: rgba(0, 0, 0, 1)"> Button2Click
</span><span style="color: rgba(0, 0, 255, 1)">end</span>
<span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> Edit1: TEdit
    Left </span>= <span style="color: rgba(128, 0, 128, 1)">268</span><span style="color: rgba(0, 0, 0, 1)">
    Top </span>= <span style="color: rgba(128, 0, 128, 1)">164</span><span style="color: rgba(0, 0, 0, 1)">
    Width </span>= <span style="color: rgba(128, 0, 128, 1)">85</span><span style="color: rgba(0, 0, 0, 1)">
    Height </span>= <span style="color: rgba(128, 0, 128, 1)">21</span><span style="color: rgba(0, 0, 0, 1)">
    TabOrder </span>= <span style="color: rgba(128, 0, 128, 1)">9</span>
<span style="color: rgba(0, 0, 255, 1)">end</span>
<span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> Button3: TButton
    Left </span>= <span style="color: rgba(128, 0, 128, 1)">364</span><span style="color: rgba(0, 0, 0, 1)">
    Top </span>= <span style="color: rgba(128, 0, 128, 1)">97</span><span style="color: rgba(0, 0, 0, 1)">
    Width </span>= <span style="color: rgba(128, 0, 128, 1)">75</span><span style="color: rgba(0, 0, 0, 1)">
    Height </span>= <span style="color: rgba(128, 0, 128, 1)">25</span><span style="color: rgba(0, 0, 0, 1)">
    Caption </span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Put</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
    TabOrder </span>= <span style="color: rgba(128, 0, 128, 1)">6</span><span style="color: rgba(0, 0, 0, 1)">
    OnClick </span>=<span style="color: rgba(0, 0, 0, 1)"> Button3Click
</span><span style="color: rgba(0, 0, 255, 1)">end</span>
<span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> edt_key: TEdit
    Left </span>= <span style="color: rgba(128, 0, 128, 1)">268</span><span style="color: rgba(0, 0, 0, 1)">
    Top </span>= <span style="color: rgba(128, 0, 128, 1)">85</span><span style="color: rgba(0, 0, 0, 1)">
    Width </span>= <span style="color: rgba(128, 0, 128, 1)">85</span><span style="color: rgba(0, 0, 0, 1)">
    Height </span>= <span style="color: rgba(128, 0, 128, 1)">21</span><span style="color: rgba(0, 0, 0, 1)">
    TabOrder </span>= <span style="color: rgba(128, 0, 128, 1)">5</span>
<span style="color: rgba(0, 0, 255, 1)">end</span>
<span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> edt_value: TEdit
    Left </span>= <span style="color: rgba(128, 0, 128, 1)">268</span><span style="color: rgba(0, 0, 0, 1)">
    Top </span>= <span style="color: rgba(128, 0, 128, 1)">117</span><span style="color: rgba(0, 0, 0, 1)">
    Width </span>= <span style="color: rgba(128, 0, 128, 1)">85</span><span style="color: rgba(0, 0, 0, 1)">
    Height </span>= <span style="color: rgba(128, 0, 128, 1)">21</span><span style="color: rgba(0, 0, 0, 1)">
    TabOrder </span>= <span style="color: rgba(128, 0, 128, 1)">7</span>
<span style="color: rgba(0, 0, 255, 1)">end</span>
<span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> Button4: TButton
    Left </span>= <span style="color: rgba(128, 0, 128, 1)">364</span><span style="color: rgba(0, 0, 0, 1)">
    Top </span>= <span style="color: rgba(128, 0, 128, 1)">11</span><span style="color: rgba(0, 0, 0, 1)">
    Width </span>= <span style="color: rgba(128, 0, 128, 1)">75</span><span style="color: rgba(0, 0, 0, 1)">
    Height </span>= <span style="color: rgba(128, 0, 128, 1)">25</span><span style="color: rgba(0, 0, 0, 1)">
    Caption </span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Destory Map</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
    TabOrder </span>= <span style="color: rgba(128, 0, 128, 1)">3</span><span style="color: rgba(0, 0, 0, 1)">
    OnClick </span>=<span style="color: rgba(0, 0, 0, 1)"> Button4Click
</span><span style="color: rgba(0, 0, 255, 1)">end</span>
<span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> btnSortKey: TButton
    Left </span>= <span style="color: rgba(128, 0, 128, 1)">241</span><span style="color: rgba(0, 0, 0, 1)">
    Top </span>= <span style="color: rgba(128, 0, 128, 1)">236</span><span style="color: rgba(0, 0, 0, 1)">
    Width </span>= <span style="color: rgba(128, 0, 128, 1)">97</span><span style="color: rgba(0, 0, 0, 1)">
    Height </span>= <span style="color: rgba(128, 0, 128, 1)">25</span><span style="color: rgba(0, 0, 0, 1)">
    Caption </span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Sort Key</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
    TabOrder </span>= <span style="color: rgba(128, 0, 128, 1)">12</span><span style="color: rgba(0, 0, 0, 1)">
    OnClick </span>=<span style="color: rgba(0, 0, 0, 1)"> btnSortKeyClick
</span><span style="color: rgba(0, 0, 255, 1)">end</span>
<span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> PutMap: TButton
    Left </span>= <span style="color: rgba(128, 0, 128, 1)">241</span><span style="color: rgba(0, 0, 0, 1)">
    Top </span>= <span style="color: rgba(128, 0, 128, 1)">203</span><span style="color: rgba(0, 0, 0, 1)">
    Width </span>= <span style="color: rgba(128, 0, 128, 1)">97</span><span style="color: rgba(0, 0, 0, 1)">
    Height </span>= <span style="color: rgba(128, 0, 128, 1)">25</span><span style="color: rgba(0, 0, 0, 1)">
    Caption </span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">PutMap</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
    TabOrder </span>= <span style="color: rgba(128, 0, 128, 1)">10</span><span style="color: rgba(0, 0, 0, 1)">
    OnClick </span>=<span style="color: rgba(0, 0, 0, 1)"> PutMapClick
</span><span style="color: rgba(0, 0, 255, 1)">end</span>
<span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> Button5: TButton
    Left </span>= <span style="color: rgba(128, 0, 128, 1)">257</span><span style="color: rgba(0, 0, 0, 1)">
    Top </span>= <span style="color: rgba(128, 0, 128, 1)">51</span><span style="color: rgba(0, 0, 0, 1)">
    Width </span>= <span style="color: rgba(128, 0, 128, 1)">184</span><span style="color: rgba(0, 0, 0, 1)">
    Height </span>= <span style="color: rgba(128, 0, 128, 1)">25</span><span style="color: rgba(0, 0, 0, 1)">
    Caption </span>= #<span style="color: rgba(128, 0, 128, 1)">25171</span>#<span style="color: rgba(128, 0, 128, 1)">21360</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Map</span><span style="color: rgba(128, 0, 0, 1)">'</span>#<span style="color: rgba(128, 0, 128, 1)">20869</span>#<span style="color: rgba(128, 0, 128, 1)">23481</span><span style="color: rgba(0, 0, 0, 1)">
    TabOrder </span>= <span style="color: rgba(128, 0, 128, 1)">4</span><span style="color: rgba(0, 0, 0, 1)">
    OnClick </span>=<span style="color: rgba(0, 0, 0, 1)"> Button5Click
</span><span style="color: rgba(0, 0, 255, 1)">end</span>
<span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> btnSortValue: TButton
    Left </span>= <span style="color: rgba(128, 0, 128, 1)">241</span><span style="color: rgba(0, 0, 0, 1)">
    Top </span>= <span style="color: rgba(128, 0, 128, 1)">270</span><span style="color: rgba(0, 0, 0, 1)">
    Width </span>= <span style="color: rgba(128, 0, 128, 1)">97</span><span style="color: rgba(0, 0, 0, 1)">
    Height </span>= <span style="color: rgba(128, 0, 128, 1)">25</span><span style="color: rgba(0, 0, 0, 1)">
    Caption </span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Sort Value</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
    TabOrder </span>= <span style="color: rgba(128, 0, 128, 1)">13</span><span style="color: rgba(0, 0, 0, 1)">
    OnClick </span>=<span style="color: rgba(0, 0, 0, 1)"> btnSortValueClick
</span><span style="color: rgba(0, 0, 255, 1)">end</span>
<span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> btnSortKeyValue: TButton
    Left </span>= <span style="color: rgba(128, 0, 128, 1)">241</span><span style="color: rgba(0, 0, 0, 1)">
    Top </span>= <span style="color: rgba(128, 0, 128, 1)">303</span><span style="color: rgba(0, 0, 0, 1)">
    Width </span>= <span style="color: rgba(128, 0, 128, 1)">97</span><span style="color: rgba(0, 0, 0, 1)">
    Height </span>= <span style="color: rgba(128, 0, 128, 1)">25</span><span style="color: rgba(0, 0, 0, 1)">
    Caption </span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Sort KeyValue</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
    TabOrder </span>= <span style="color: rgba(128, 0, 128, 1)">14</span><span style="color: rgba(0, 0, 0, 1)">
    OnClick </span>=<span style="color: rgba(0, 0, 0, 1)"> btnSortKeyValueClick
</span><span style="color: rgba(0, 0, 255, 1)">end</span>
<span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> btnHashMap10000: TButton
    Left </span>= <span style="color: rgba(128, 0, 128, 1)">241</span><span style="color: rgba(0, 0, 0, 1)">
    Top </span>= <span style="color: rgba(128, 0, 128, 1)">379</span><span style="color: rgba(0, 0, 0, 1)">
    Width </span>= <span style="color: rgba(128, 0, 128, 1)">122</span><span style="color: rgba(0, 0, 0, 1)">
    Height </span>= <span style="color: rgba(128, 0, 128, 1)">25</span><span style="color: rgba(0, 0, 0, 1)">
    Caption </span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">HashMap </span><span style="color: rgba(128, 0, 0, 1)">'</span>#<span style="color: rgba(128, 0, 128, 1)">22686</span>#<span style="color: rgba(128, 0, 128, 1)">21152</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">N</span><span style="color: rgba(128, 0, 0, 1)">'</span>#<span style="color: rgba(128, 0, 128, 1)">26465</span><span style="color: rgba(0, 0, 0, 1)">
    TabOrder </span>= <span style="color: rgba(128, 0, 128, 1)">17</span><span style="color: rgba(0, 0, 0, 1)">
    OnClick </span>=<span style="color: rgba(0, 0, 0, 1)"> btnHashMap10000Click
</span><span style="color: rgba(0, 0, 255, 1)">end</span>
<span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> btnStringList10000: TButton
    Left </span>= <span style="color: rgba(128, 0, 128, 1)">241</span><span style="color: rgba(0, 0, 0, 1)">
    Top </span>= <span style="color: rgba(128, 0, 128, 1)">408</span><span style="color: rgba(0, 0, 0, 1)">
    Width </span>= <span style="color: rgba(128, 0, 128, 1)">122</span><span style="color: rgba(0, 0, 0, 1)">
    Height </span>= <span style="color: rgba(128, 0, 128, 1)">25</span><span style="color: rgba(0, 0, 0, 1)">
    Caption </span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">StringList </span><span style="color: rgba(128, 0, 0, 1)">'</span>#<span style="color: rgba(128, 0, 128, 1)">22686</span>#<span style="color: rgba(128, 0, 128, 1)">21152</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">N</span><span style="color: rgba(128, 0, 0, 1)">'</span>#<span style="color: rgba(128, 0, 128, 1)">26465</span><span style="color: rgba(0, 0, 0, 1)">
    TabOrder </span>= <span style="color: rgba(128, 0, 128, 1)">19</span><span style="color: rgba(0, 0, 0, 1)">
    OnClick </span>=<span style="color: rgba(0, 0, 0, 1)"> btnStringList10000Click
</span><span style="color: rgba(0, 0, 255, 1)">end</span>
<span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> edt_N: TEdit
    Left </span>= <span style="color: rgba(128, 0, 128, 1)">259</span><span style="color: rgba(0, 0, 0, 1)">
    Top </span>= <span style="color: rgba(128, 0, 128, 1)">345</span><span style="color: rgba(0, 0, 0, 1)">
    Width </span>= <span style="color: rgba(128, 0, 128, 1)">104</span><span style="color: rgba(0, 0, 0, 1)">
    Height </span>= <span style="color: rgba(128, 0, 128, 1)">21</span><span style="color: rgba(0, 0, 0, 1)">
    TabOrder </span>= <span style="color: rgba(128, 0, 128, 1)">15</span><span style="color: rgba(0, 0, 0, 1)">
    Text </span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">10000</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(0, 0, 255, 1)">end</span>
<span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> btn_hashMap_get: TButton
    Left </span>= <span style="color: rgba(128, 0, 128, 1)">373</span><span style="color: rgba(0, 0, 0, 1)">
    Top </span>= <span style="color: rgba(128, 0, 128, 1)">379</span><span style="color: rgba(0, 0, 0, 1)">
    Width </span>= <span style="color: rgba(128, 0, 128, 1)">100</span><span style="color: rgba(0, 0, 0, 1)">
    Height </span>= <span style="color: rgba(128, 0, 128, 1)">25</span><span style="color: rgba(0, 0, 0, 1)">
    Caption </span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">hashMap_get</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
    TabOrder </span>= <span style="color: rgba(128, 0, 128, 1)">18</span><span style="color: rgba(0, 0, 0, 1)">
    OnClick </span>=<span style="color: rgba(0, 0, 0, 1)"> btn_hashMap_getClick
</span><span style="color: rgba(0, 0, 255, 1)">end</span>
<span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> btn_stringList_get: TButton
    Left </span>= <span style="color: rgba(128, 0, 128, 1)">373</span><span style="color: rgba(0, 0, 0, 1)">
    Top </span>= <span style="color: rgba(128, 0, 128, 1)">408</span><span style="color: rgba(0, 0, 0, 1)">
    Width </span>= <span style="color: rgba(128, 0, 128, 1)">100</span><span style="color: rgba(0, 0, 0, 1)">
    Height </span>= <span style="color: rgba(128, 0, 128, 1)">25</span><span style="color: rgba(0, 0, 0, 1)">
    Caption </span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">stringList_get</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
    TabOrder </span>= <span style="color: rgba(128, 0, 128, 1)">20</span><span style="color: rgba(0, 0, 0, 1)">
    OnClick </span>=<span style="color: rgba(0, 0, 0, 1)"> btn_stringList_getClick
</span><span style="color: rgba(0, 0, 255, 1)">end</span>
<span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> edt_Get: TEdit
    Left </span>= <span style="color: rgba(128, 0, 128, 1)">387</span><span style="color: rgba(0, 0, 0, 1)">
    Top </span>= <span style="color: rgba(128, 0, 128, 1)">345</span><span style="color: rgba(0, 0, 0, 1)">
    Width </span>= <span style="color: rgba(128, 0, 128, 1)">104</span><span style="color: rgba(0, 0, 0, 1)">
    Height </span>= <span style="color: rgba(128, 0, 128, 1)">21</span><span style="color: rgba(0, 0, 0, 1)">
    TabOrder </span>= <span style="color: rgba(128, 0, 128, 1)">16</span>
<span style="color: rgba(0, 0, 255, 1)">end</span>
<span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> Button6: TButton
    Left </span>= <span style="color: rgba(128, 0, 128, 1)">364</span><span style="color: rgba(0, 0, 0, 1)">
    Top </span>= <span style="color: rgba(128, 0, 128, 1)">203</span><span style="color: rgba(0, 0, 0, 1)">
    Width </span>= <span style="color: rgba(128, 0, 128, 1)">75</span><span style="color: rgba(0, 0, 0, 1)">
    Height </span>= <span style="color: rgba(128, 0, 128, 1)">25</span><span style="color: rgba(0, 0, 0, 1)">
    Caption </span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">AddObject</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
    TabOrder </span>= <span style="color: rgba(128, 0, 128, 1)">11</span><span style="color: rgba(0, 0, 0, 1)">
    OnClick </span>=<span style="color: rgba(0, 0, 0, 1)"> Button6Click
</span><span style="color: rgba(0, 0, 255, 1)">end</span>
<span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> Panel1: TPanel
    Left </span>= <span style="color: rgba(128, 0, 128, 1)">504</span><span style="color: rgba(0, 0, 0, 1)">
    Top </span>= <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">
    Width </span>= <span style="color: rgba(128, 0, 128, 1)">267</span><span style="color: rgba(0, 0, 0, 1)">
    Height </span>= <span style="color: rgba(128, 0, 128, 1)">480</span><span style="color: rgba(0, 0, 0, 1)">
    Align </span>=<span style="color: rgba(0, 0, 0, 1)"> alRight
    BevelOuter </span>=<span style="color: rgba(0, 0, 0, 1)"> bvNone
    TabOrder </span>= <span style="color: rgba(128, 0, 128, 1)">1</span>
    <span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> Label6: TLabel
      Left </span>= <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">
      Top </span>= <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">
      Width </span>= <span style="color: rgba(128, 0, 128, 1)">267</span><span style="color: rgba(0, 0, 0, 1)">
      Height </span>= <span style="color: rgba(128, 0, 128, 1)">16</span><span style="color: rgba(0, 0, 0, 1)">
      Align </span>=<span style="color: rgba(0, 0, 0, 1)"> alTop
      Caption </span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">HashMap</span><span style="color: rgba(128, 0, 0, 1)">'</span>#<span style="color: rgba(128, 0, 128, 1)">20869</span>#<span style="color: rgba(128, 0, 128, 1)">23384</span>#<span style="color: rgba(128, 0, 128, 1)">20998</span>#<span style="color: rgba(128, 0, 128, 1)">24067</span>
    <span style="color: rgba(0, 0, 255, 1)">end</span>
    <span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> Memo2: TMemo
      Left </span>= <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">
      Top </span>= <span style="color: rgba(128, 0, 128, 1)">16</span><span style="color: rgba(0, 0, 0, 1)">
      Width </span>= <span style="color: rgba(128, 0, 128, 1)">267</span><span style="color: rgba(0, 0, 0, 1)">
      Height </span>= <span style="color: rgba(128, 0, 128, 1)">464</span><span style="color: rgba(0, 0, 0, 1)">
      Align </span>=<span style="color: rgba(0, 0, 0, 1)"> alClient
      ScrollBars </span>=<span style="color: rgba(0, 0, 0, 1)"> ssVertical
      TabOrder </span>= <span style="color: rgba(128, 0, 128, 1)">0</span>
    <span style="color: rgba(0, 0, 255, 1)">end</span>
<span style="color: rgba(0, 0, 255, 1)">end</span>
<span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> btn_HashStringList1000: TButton
    Left </span>= <span style="color: rgba(128, 0, 128, 1)">241</span><span style="color: rgba(0, 0, 0, 1)">
    Top </span>= <span style="color: rgba(128, 0, 128, 1)">439</span><span style="color: rgba(0, 0, 0, 1)">
    Width </span>= <span style="color: rgba(128, 0, 128, 1)">122</span><span style="color: rgba(0, 0, 0, 1)">
    Height </span>= <span style="color: rgba(128, 0, 128, 1)">25</span><span style="color: rgba(0, 0, 0, 1)">
    Caption </span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">HashStringList </span><span style="color: rgba(128, 0, 0, 1)">'</span>#<span style="color: rgba(128, 0, 128, 1)">22686</span>#<span style="color: rgba(128, 0, 128, 1)">21152</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">N</span><span style="color: rgba(128, 0, 0, 1)">'</span>#<span style="color: rgba(128, 0, 128, 1)">26465</span><span style="color: rgba(0, 0, 0, 1)">
    TabOrder </span>= <span style="color: rgba(128, 0, 128, 1)">21</span><span style="color: rgba(0, 0, 0, 1)">
    OnClick </span>=<span style="color: rgba(0, 0, 0, 1)"> btn_HashStringList1000Click
</span><span style="color: rgba(0, 0, 255, 1)">end</span>
<span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> btn_HashStringList_get: TButton
    Left </span>= <span style="color: rgba(128, 0, 128, 1)">373</span><span style="color: rgba(0, 0, 0, 1)">
    Top </span>= <span style="color: rgba(128, 0, 128, 1)">439</span><span style="color: rgba(0, 0, 0, 1)">
    Width </span>= <span style="color: rgba(128, 0, 128, 1)">100</span><span style="color: rgba(0, 0, 0, 1)">
    Height </span>= <span style="color: rgba(128, 0, 128, 1)">25</span><span style="color: rgba(0, 0, 0, 1)">
    Caption </span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">HashStringList_Get</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
    TabOrder </span>= <span style="color: rgba(128, 0, 128, 1)">22</span><span style="color: rgba(0, 0, 0, 1)">
    OnClick </span>=<span style="color: rgba(0, 0, 0, 1)"> btn_HashStringList_getClick
</span><span style="color: rgba(0, 0, 255, 1)">end</span>
<span style="color: rgba(0, 0, 255, 1)">end</span></pre>
</div>
<p>&nbsp;</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)">*******************************************************</span><span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 0, 1)">{</span>                                                       <span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)">       Delphi HashMap test                           </span><span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 0, 1)">{</span>                                                       <span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)">       版权所有 (C) 2018 hsoft                        </span><span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 0, 1)">{</span>                                                      <span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 0, 1)">{</span>                                                       <span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)"> Author: MarkWu    Email: 77910086@qq.com                </span><span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)"> Date:   2018-01-02 14:17:00                           </span><span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)"> Desc:   HashMap                                       </span><span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)">*******************************************************</span><span style="color: rgba(0, 128, 0, 1)">}</span>

<span style="color: rgba(0, 0, 255, 1)">unit</span><span style="color: rgba(0, 0, 0, 1)"> Unit1;

</span><span style="color: rgba(0, 0, 255, 1)">interface</span>

<span style="color: rgba(0, 0, 255, 1)">uses</span><span style="color: rgba(0, 0, 0, 1)">
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, uHashMap, StdCtrls, StrUtils, ExtCtrls, IniFiles;

</span><span style="color: rgba(0, 0, 255, 1)">type</span><span style="color: rgba(0, 0, 0, 1)">
TForm1 </span>= <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)">(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Button2: TButton;
    Edit1: TEdit;
    Button3: TButton;
    edt_key: TEdit;
    edt_value: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Button4: TButton;
    btnSortKey: TButton;
    PutMap: TButton;
    Button5: TButton;
    btnSortValue: TButton;
    btnSortKeyValue: TButton;
    btnHashMap10000: TButton;
    btnStringList10000: TButton;
    Label4: TLabel;
    edt_N: TEdit;
    btn_hashMap_get: TButton;
    btn_stringList_get: TButton;
    Label5: TLabel;
    edt_Get: TEdit;
    Button6: TButton;
    Panel1: TPanel;
    Label6: TLabel;
    Memo2: TMemo;
    btn_HashStringList1000: TButton;
    btn_HashStringList_get: TButton;
    </span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> Button1Click(Sender: TObject);
    </span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> FormCreate(Sender: TObject);
    </span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> Button2Click(Sender: TObject);
    </span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> Button3Click(Sender: TObject);
    </span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> Button4Click(Sender: TObject);
    </span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> btnSortKeyClick(Sender: TObject);
    </span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> PutMapClick(Sender: TObject);
    </span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> Button5Click(Sender: TObject);
    </span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> btnSortValueClick(Sender: TObject);
    </span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> btnSortKeyValueClick(Sender: TObject);
    </span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> btnHashMap10000Click(Sender: TObject);
    </span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> btnStringList10000Click(Sender: TObject);
    </span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> btn_hashMap_getClick(Sender: TObject);
    </span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> btn_stringList_getClick(Sender: TObject);
    </span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> Button6Click(Sender: TObject);
    </span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> btn_HashStringList1000Click(Sender: TObject);
    </span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> btn_HashStringList_getClick(Sender: TObject);

</span><span style="color: rgba(0, 0, 255, 1)">private</span>
    <span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)"> Private declarations </span><span style="color: rgba(0, 128, 0, 1)">}</span><span style="color: rgba(0, 0, 0, 1)">
    aHashMap: THashMap;

    FMap: THashMap;
    FList: TStringList;
    FHashList: THashedStringList;
</span><span style="color: rgba(0, 0, 255, 1)">public</span>
    <span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)"> Public declarations </span><span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)">
Form1: TForm1;

</span><span style="color: rgba(0, 0, 255, 1)">implementation</span>

<span style="color: rgba(0, 0, 255, 1)">uses</span><span style="color: rgba(0, 0, 0, 1)"> uHashEntry;

</span><span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)">$R *.dfm</span><span style="color: rgba(0, 128, 0, 1)">}</span>

<span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TForm1.FormCreate(Sender: TObject);
</span><span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">
aHashMap :</span>= THashMap.<span style="color: rgba(0, 0, 255, 1)">Create</span><span style="color: rgba(0, 0, 0, 1)">;

FMap :</span>= THashMap.<span style="color: rgba(0, 0, 255, 1)">Create</span><span style="color: rgba(0, 0, 0, 1)">;
FList :</span>= TStringList.<span style="color: rgba(0, 0, 255, 1)">Create</span><span style="color: rgba(0, 0, 0, 1)">;
FHashList :</span>= THashedStringList.<span style="color: rgba(0, 0, 255, 1)">Create</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TForm1.Button1Click(Sender: TObject);
</span><span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">caption :=IntToStr(aHashMap.HashCode('123'));</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">caption :=IntToStr(5 mod 3);</span>
aHashMap.Add(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">中国</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">中华人民共和国</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
aHashMap.Add(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">中國</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">中華人民共和國</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
aHashMap.Add(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">吴wu</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">MarkWu</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
aHashMap.Add(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">b</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">);
aHashMap.Add(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">c</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 128, 1)">3</span><span style="color: rgba(0, 0, 0, 1)">);
aHashMap.Add(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">d</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">dd</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
aHashMap.Add(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">e</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">ee</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
aHashMap.Add(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">f</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">ff</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
aHashMap.Add(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">g</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">ggg</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
aHashMap.Add(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">h</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 128, 1)">11.1</span><span style="color: rgba(0, 0, 0, 1)">);
aHashMap.Add(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">i</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 128, 1)">22.2</span><span style="color: rgba(0, 0, 0, 1)">);
aHashMap.Add(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">j</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 128, 1)">33.3</span><span style="color: rgba(0, 0, 0, 1)">);
aHashMap.Add(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">k</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 128, 1)">44.4</span><span style="color: rgba(0, 0, 0, 1)">);
aHashMap.Add(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">l</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, True);

aHashMap.Add(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">aa</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">a1</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
aHashMap.Add(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">ca</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">c2</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);

aHashMap.Add(</span><span style="color: rgba(128, 0, 0, 1)">''</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">0000000000</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
aHashMap.Add(</span><span style="color: rgba(128, 0, 0, 1)">''</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">1111111111</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> aHashMap.Put('m', VarArrayOf());</span>
<span style="color: rgba(0, 0, 0, 1)">
Memo1.Lines.Add(aHashMap.ToString);
</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TForm1.Button2Click(Sender: TObject);
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)">
I: Integer;
aMap: THashMap;
aSet: TEntrySet;
</span><span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)">aMap := THashMap.Create;
aMap.Put('h1', 'h1');
aMap.Put('h2', 2);
aMap.Put('h3', 33);
aMap.Put('中1', 81);
aMap.Put('中2', 82);
aMap.Put('中2', 83);

aMap.Put(aHashMap);
</span><span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">Memo2.Lines.Add(aMap.ToString);</span>
Memo2.Lines.Add(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">---------------Get-----------------</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
Memo2.Lines.Add(VarToStrDef( aHashMap.Get(Edit1.Text), </span><span style="color: rgba(128, 0, 0, 1)">''</span><span style="color: rgba(0, 0, 0, 1)">));

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">aMap.Free;</span>
<span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TForm1.Button3Click(Sender: TObject);
</span><span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">
aHashMap.Add(edt_key.Text, edt_value.Text);
</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TForm1.Button4Click(Sender: TObject);
</span><span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 0, 255, 1)">FreeAndNil</span><span style="color: rgba(0, 0, 0, 1)">(aHashMap);
</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TForm1.btnSortKeyClick(Sender: TObject);
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)">
I: Integer;
aSet: TEntrySet;
</span><span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">
Memo2.Lines.Add(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">---------------Sort Key-----------------</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
aSet :</span>=<span style="color: rgba(0, 0, 0, 1)"> aHashMap.Sort(stKey);
</span><span style="color: rgba(0, 0, 255, 1)">for</span> I := <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(0, 0, 255, 1)">to</span> Length(aSet) - <span style="color: rgba(128, 0, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">
    Memo2.Lines.Add(aSet.Key </span>+ <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">=</span><span style="color: rgba(128, 0, 0, 1)">'</span> + VarToStrDef(aSet.Value, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">NULL</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">) );
</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TForm1.btnSortValueClick(Sender: TObject);
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)">
I: Integer;
aSet: TEntrySet;
</span><span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">
Memo2.Lines.Add(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">---------------Sort Value-----------------</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
aSet :</span>=<span style="color: rgba(0, 0, 0, 1)"> aHashMap.Sort(stValue);
</span><span style="color: rgba(0, 0, 255, 1)">for</span> I := <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(0, 0, 255, 1)">to</span> Length(aSet) - <span style="color: rgba(128, 0, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">
    Memo2.Lines.Add(aSet.Key </span>+ <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">=</span><span style="color: rgba(128, 0, 0, 1)">'</span> + VarToStrDef(aSet.Value, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">NULL</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">) );
</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TForm1.btnSortKeyValueClick(Sender: TObject);
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)">
I: Integer;
aSet: TEntrySet;
</span><span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">
Memo2.Lines.Add(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">---------------Sort KeyValue-----------------</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
aSet :</span>=<span style="color: rgba(0, 0, 0, 1)"> aHashMap.Sort(stKeyValue);
</span><span style="color: rgba(0, 0, 255, 1)">for</span> I := <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(0, 0, 255, 1)">to</span> Length(aSet) - <span style="color: rgba(128, 0, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">
    Memo2.Lines.Add(aSet.Key </span>+ <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">=</span><span style="color: rgba(128, 0, 0, 1)">'</span> + VarToStrDef(aSet.Value, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">NULL</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">) );
</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;


</span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TForm1.PutMapClick(Sender: TObject);
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)">
I: Integer;
aMap: THashMap;
aSet: TEntrySet;
</span><span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">
aMap :</span>= THashMap.<span style="color: rgba(0, 0, 255, 1)">Create</span><span style="color: rgba(0, 0, 0, 1)">;
aMap.Add(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">h1</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">h1</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
aMap.Add(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">h2</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">);
aMap.Add(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">h3</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 128, 1)">33</span><span style="color: rgba(0, 0, 0, 1)">);
aMap.Add(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">中1</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 128, 1)">81</span><span style="color: rgba(0, 0, 0, 1)">);
aMap.Add(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">中2</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 128, 1)">82</span><span style="color: rgba(0, 0, 0, 1)">);
aMap.Add(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">中2</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 128, 1)">83</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">aMap.Put(aHashMap);</span>
<span style="color: rgba(0, 0, 0, 1)">aHashMap.Add(aMap);

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">Memo2.Lines.Add(aMap.ToString);</span>
<span style="color: rgba(0, 0, 0, 1)">
   Memo2.Lines.Add(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">-------------------PutMap-------------------</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
aSet :</span>=<span style="color: rgba(0, 0, 0, 1)"> aHashMap.GetEntrySet;
</span><span style="color: rgba(0, 0, 255, 1)">for</span> I := <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(0, 0, 255, 1)">to</span> Length(aSet) - <span style="color: rgba(128, 0, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">
    Memo2.Lines.Add(aSet.Key </span>+ <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">=</span><span style="color: rgba(128, 0, 0, 1)">'</span> + VarToStrDef(aSet.Value, <span style="color: rgba(128, 0, 0, 1)">''</span><span style="color: rgba(0, 0, 0, 1)">) );
</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
aMap.Free;
</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TForm1.Button5Click(Sender: TObject);
</span><span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">
Memo2.Lines.Add(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">------------------ToString----------------------</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
Memo2.Lines.Add(aHashMap.ToString);
</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;



</span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TForm1.btnHashMap10000Click(Sender: TObject);
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)">
I: Integer;
iBegin, iEnd: Cardinal;
map: THashMap;
</span><span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">
FMap.Clear;
iBegin :</span>=<span style="color: rgba(0, 0, 0, 1)"> GetTickCount;
map :</span>=<span style="color: rgba(0, 0, 0, 1)"> FMap;
</span><span style="color: rgba(0, 0, 255, 1)">for</span> I := <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(0, 0, 255, 1)">to</span> StrToInt(edt_N.Text) - <span style="color: rgba(128, 0, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">
    map.Add( IntToStr(I), I);   </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">'m' +</span>
<span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
iEnd :</span>= (GetTickCount -<span style="color: rgba(0, 0, 0, 1)"> iBegin);

Memo2.Lines.Add(Format(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">-------------------- %s ToString--------------------</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, ));
Memo2.Lines.Add(Format(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">HashMap 增加%d条, 总共花了%d ms</span><span style="color: rgba(128, 0, 0, 1)">'</span>, ));
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">Memo2.Lines.Add(map.ToString);</span>
<span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TForm1.btnStringList10000Click(Sender: TObject);
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)">
I: Integer;
iBegin, iEnd: Cardinal;
str: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
aList: TStringList;
</span><span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">
FList.Clear;
iBegin :</span>=<span style="color: rgba(0, 0, 0, 1)"> GetTickCount;
aList :</span>= FList; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">TStringList.Create;</span>
<span style="color: rgba(0, 0, 255, 1)">for</span> I := <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(0, 0, 255, 1)">to</span> StrToInt(edt_N.Text) -<span style="color: rgba(128, 0, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">
    aList.Add( IntToStr(I) </span>+ <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">=</span><span style="color: rgba(128, 0, 0, 1)">'</span> +<span style="color: rgba(0, 0, 0, 1)"> IntToStr(I));
</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
iEnd :</span>= GetTickCount -<span style="color: rgba(0, 0, 0, 1)"> iBegin;

Memo2.Lines.Add(Format(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">-------------------- %s ToString--------------------</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, ));
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">Memo2.Lines.Add(btnStringList10000.Caption + ' 总共花了' + Inttostr(iEnd));</span>
Memo2.Lines.Add(Format(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">StringList 增加%d条, 总共花了%d ms</span><span style="color: rgba(128, 0, 0, 1)">'</span>, ));

</span><span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)">
str := '';
for I := 0 to aList.Count - 1 do
begin
    str := str + #13#10 + aList;
end;
Memo2.Lines.Add(str);
</span><span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TForm1.btn_hashMap_getClick(Sender: TObject);
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)">
iBegin, iEnd: Cardinal;
sValue: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 0, 255, 1)">try</span>
    <span style="color: rgba(0, 0, 255, 1)">if</span> Trim(edt_Get.Text) = <span style="color: rgba(128, 0, 0, 1)">''</span> <span style="color: rgba(0, 0, 255, 1)">then</span>
    <span style="color: rgba(0, 0, 255, 1)">begin</span>
      <span style="color: rgba(0, 0, 255, 1)">if</span> edt_Get.CanFocus <span style="color: rgba(0, 0, 255, 1)">then</span><span style="color: rgba(0, 0, 0, 1)"> edt_Get.SetFocus;
      ShowMessage(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">请输入要查询的key</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
      Abort;
    </span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
    iBegin :</span>=<span style="color: rgba(0, 0, 0, 1)"> GetTickCount;
    sValue :</span>=<span style="color: rgba(0, 0, 0, 1)"> FMap.Get(edt_Get.Text);
    iEnd :</span>= GetTickCount -<span style="color: rgba(0, 0, 0, 1)"> iBegin;
    Memo2.Lines.Add(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">------------------hashMap Get-----------------</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
    Memo2.Lines.Add(sValue </span>+ <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">---&gt;</span><span style="color: rgba(128, 0, 0, 1)">'</span> + IntToStr(iEnd) + <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">ms</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">except</span>

<span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TForm1.btn_stringList_getClick(Sender: TObject);
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)">
iBegin, iEnd: Cardinal;
sValue: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 0, 255, 1)">try</span>
    <span style="color: rgba(0, 0, 255, 1)">if</span> Trim(edt_Get.Text) = <span style="color: rgba(128, 0, 0, 1)">''</span> <span style="color: rgba(0, 0, 255, 1)">then</span>
    <span style="color: rgba(0, 0, 255, 1)">begin</span>
      <span style="color: rgba(0, 0, 255, 1)">if</span> edt_Get.CanFocus <span style="color: rgba(0, 0, 255, 1)">then</span><span style="color: rgba(0, 0, 0, 1)"> edt_Get.SetFocus;
      ShowMessage(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">请输入要查询的key</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
      Abort;
    </span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
    iBegin :</span>=<span style="color: rgba(0, 0, 0, 1)"> GetTickCount;
    sValue :</span>= FList.Values; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">FList.ValueFromIndex(Flist.);</span>
    iEnd := GetTickCount -<span style="color: rgba(0, 0, 0, 1)"> iBegin;
    Memo2.Lines.Add(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">------------------StringList Get-----------------</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
    Memo2.Lines.Add(sValue </span>+ <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">---&gt;</span><span style="color: rgba(128, 0, 0, 1)">'</span> + IntToStr(iEnd) + <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">ms</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">except</span>

<span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TForm1.Button6Click(Sender: TObject);
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)">
v: Variant;
map: THashMap;
</span><span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">map := THashMap.Create;</span>
map :=<span style="color: rgba(0, 0, 0, 1)"> aHashMap;
</span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)">
    v :</span>=<span style="color: rgba(0, 0, 0, 1)"> Integer(Self);
    map.AddObject(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">form1</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, Self);
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">ShowMessage(map.Get('form1').Value);</span>
<span style="color: rgba(0, 0, 0, 1)">
    ShowMessage(TForm1(map.GetObject(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">form1</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)).Caption);
</span><span style="color: rgba(0, 0, 255, 1)">finally</span>
    <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">FreeAndNil(map);</span>
<span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TForm1.btn_HashStringList1000Click(Sender: TObject);
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)">
I: Integer;
iBegin, iEnd: Cardinal;
str: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
aList: THashedStringList;
</span><span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">
FHashList.Clear;
iBegin :</span>=<span style="color: rgba(0, 0, 0, 1)"> GetTickCount;
aList :</span>= FHashList; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">TStringList.Create;</span>
<span style="color: rgba(0, 0, 255, 1)">for</span> I := <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(0, 0, 255, 1)">to</span> StrToInt(edt_N.Text) -<span style="color: rgba(128, 0, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">
    aList.Add(IntToStr(I) </span>+ <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">=</span><span style="color: rgba(128, 0, 0, 1)">'</span> +<span style="color: rgba(0, 0, 0, 1)"> IntToStr(I));
</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
iEnd :</span>= GetTickCount -<span style="color: rgba(0, 0, 0, 1)"> iBegin;

Memo2.Lines.Add(Format(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">-------------------- %s ToString--------------------</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, ));
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">Memo2.Lines.Add(btnStringList10000.Caption + ' 总共花了' + Inttostr(iEnd));</span>
Memo2.Lines.Add(Format(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">HashStringList 增加%d条, 总共花了%d ms</span><span style="color: rgba(128, 0, 0, 1)">'</span>, ));

</span><span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)">
str := '';
for I := 0 to aList.Count - 1 do
begin
    str := str + #13#10 + aList;
end;
Memo2.Lines.Add(str);
</span><span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TForm1.btn_HashStringList_getClick(Sender: TObject);
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)">
iBegin, iEnd: Cardinal;
sValue: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 0, 255, 1)">try</span>
    <span style="color: rgba(0, 0, 255, 1)">if</span> Trim(edt_Get.Text) = <span style="color: rgba(128, 0, 0, 1)">''</span> <span style="color: rgba(0, 0, 255, 1)">then</span>
    <span style="color: rgba(0, 0, 255, 1)">begin</span>
      <span style="color: rgba(0, 0, 255, 1)">if</span> edt_Get.CanFocus <span style="color: rgba(0, 0, 255, 1)">then</span><span style="color: rgba(0, 0, 0, 1)"> edt_Get.SetFocus;
      ShowMessage(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">请输入要查询的key</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
      Abort;
    </span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
    iBegin :</span>=<span style="color: rgba(0, 0, 0, 1)"> GetTickCount;
    sValue :</span>=<span style="color: rgba(0, 0, 0, 1)"> FHashList.Values;
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">sValue := FHashList.ValueFromIndex[ FHashList.IndexOfName(edt_Get.Text) ];</span>
    iEnd := GetTickCount -<span style="color: rgba(0, 0, 0, 1)"> iBegin;
    Memo2.Lines.Add(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">------------------HashedStringList Get-----------------</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
    Memo2.Lines.Add(sValue </span>+ <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">---&gt;</span><span style="color: rgba(128, 0, 0, 1)">'</span> + IntToStr(iEnd) + <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">ms</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">except</span>

<span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">end</span>.</pre>
</div>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/markwu/p/13601095.html
頁: [1]
查看完整版本: Delphi的HashMap