新增元素時先用 BinarySearch 找位置,若需擴容則呼叫 EnsureCapacity(通常採 2 倍策略),再以 Array.Copy 位移後續元素騰出空位:
public void Add(TKey key, TValue value)
{
int index = Array.BinarySearch(keys, 0, _size, key, _comparer);
if (index >= 0) throw new ArgumentException("Key 已存在");
index = ~index; // 取得插入點
EnsureCapacity(_size + 1);
if (index < _size)
{
Array.Copy(keys, index, keys, index + 1, _size - index);
Array.Copy(values, index, values, index + 1, _size - index);
}
keys[index] = key;
values[index] = value;
_size++; version++;
}
key:1 value:b
key:2 value:c
key:3 value:a
key:4 value:d
容量:4 數量:4
key:1 value:b
key:2 value:c
key:3 value:a
key:4 value:f
key:5 value:e
key:6 value:d
容量:8 數量:6
key:1 value:b
key:2 value:c
key:3 value:a
key:4 value:f
key:5 value:e
key:6 value:d
key:7 value:h
key:8 value:g
key:9 value:i
容量:16 數量:9
觀察可知:初始 4 元素容量 4,新增 2 個擴容至 8,再加 3 個擴容至 16。元素始終依 Key 升冪排列,符合預期。核心增刪查架構已成形。