在重新发明可能已经多次发明的任何轮子之前,我正在寻找一个库,它可以让我处理潜在的巨大 char 数组(而不是 Char),同时保持堆开销和不必要的堆分配很小。
这意味着数组实现应该允许
- 以 collection.get(long index) 访问元素
- 将元素存储为 collection.put(long index, char what) 并在必要时自动分配调整数组大小
- 通过我想选择的一些大小的恒定大小块重新调整数组的大小,例如 2^14 个元素。
第 3 点对我的目的很重要:许多实现只是通过分配两倍于当前大小的东西来调整集合的大小,复制并丢弃旧的。如果集合变得非常大并且下一次调整大小操作将需要全部或更多内容,则这很糟糕,尽管堆上仍然可能有足够的空间。
此外,索引类型应该很长,以便可以在数组中存储超过 2^(32-1) 个元素。
因此,如果我要实现这一点,我可能会使用可选择块大小的动态数组。第一级数组将以任何旧方式调整大小(它不会包含太多元素),而第二级数组将始终具有 2^N 的某个固定块大小。
有没有人知道一个库可以做到这一点或类似的内存效率?