我有大量的物品。每个对象都有一个唯一的GUID。我需要这个GUID的地图对象。我现在使用System.Collections.Hashtable。问题是添加对象hashset会改变其大小并导致Large对象的碎片化。它还需要两倍于我拥有对象的内存。我需要减少内存使用量。
我需要的数据结构的特征:
为此目的,最佳数据结构是什么?我知道有红黑和AVL树,但我不知道哪种树更好用。也许还有另一种树数据结构适合按唯一标识符或字符串进行映射?哪种数据结构可以更快地运行?
答案 0 :(得分:0)
数据结构是静态的还是动态的?如果它是静态的,请考虑使用perfect hashing。在没有太多内存开销的情况下,您将获得哈希表的好处。
不要依靠树来解决你的问题...他们也有相当高的内存开销,而且查询和更新的速度往往较慢。
答案 1 :(得分:0)
哈希表中的500,000个条目真的不是很多。只需告诉哈希表它在创建它时会变大:
var myDict = new Dictionary<key,val>(1000000);
这将创建一个具有接近1,000,000个元素的空间的字典。当你接近1,000,000时,它会被调整大小。旧的非泛型Hashtable
为您提供更多控制权,允许您指定加载因子,以控制重新分配。看here。