【问题标题】:A List that automatically re-sizes when an element is inserted at an index greater than current List size当元素插入到大于当前列表大小的索引处时自动调整大小的列表
【发布时间】:2013-12-06 09:48:28
【问题描述】:

如果在大于当前列表大小的索引处添加元素而不抛出任何 RuntimeException,我如何创建一个重新调整大小的List<T>。考虑以下代码示例:

    List<String> myList = new ArrayList<String>();
    // Assuming current list size is 10, Let's insert at a very large index.
    int index = 10000;
    myList.add(index, "test");

如果索引超出列表大小,添加操作将导致 IndexOutOfBoundException。

我希望列表填充稀疏,因此它的大小应该与非空值的数量成正比。

【问题讨论】:

  • 使用index并且java中不存在可增长的集合,要么不要使用index,同时在现有集合上添加或编写您的自定义逻辑,即ArrayList
  • 那么地图怎么样?
  • 每个索引代表两个字符串之间的 EditDistance。例如,编辑书籍之间的距离 --> test = 4,因此 4 处的索引将具有测试。我实际上正在实现 BK 树的变体。我正在寻找一个内存开销相对较小的集合,因为随着树的增长,子节点的子节点将具有非常小的大小。
  • 每个索引代表两个字符串之间的编辑距离?然后你会有一个“书”列表,一个“杂志”列表,等等?
  • @Anupam:Map&lt;Integer, String&gt; 有什么问题?它完全涵盖了您所要求的功能。

标签: java arraylist collections


【解决方案1】:

在java中实现稀疏列表最简单的方法就是使用哈希映射

Map<Integer, String> sparseList = new HashMap<>();

将元素添加到列表中:

sparseList.put(index, value)

移除元素:

sparseList.remove(index);

查询一个元素:

sparseList.get(index); // Will return null if no element at this position

如果你需要区分 null 和 not set 你可以这样做

sparseList.containsKey(index);

在这种情况下,列表不会保留元素的顺序,如果这很重要,您可以将 HashMap 替换为 TreeMap。

【讨论】:

  • TreeMap 将保持排序。
  • 非常正确,我会补充的。
猜你喜欢
  • 1970-01-01
  • 2016-06-18
  • 1970-01-01
  • 1970-01-01
  • 2017-12-28
  • 1970-01-01
  • 1970-01-01
  • 2018-10-04
  • 1970-01-01
相关资源
最近更新 更多