【问题标题】:Java random insert collectionJava随机插入集合
【发布时间】:2012-06-10 16:23:46
【问题描述】:

我正在考虑使用最适合随机插入的 Java 集合。我将插入很多内容,最后只阅读一次集合。

我想要的功能是在指定索引处添加一个元素,在 之间的任意位置。使用哪个集合最有效?

【问题讨论】:

  • 索引是连续的范围吗?
  • Java。集合将增长,索引将在 0 长度范围内
  • @Bober02 什么是长度?
  • 好的,我修改了问题。我想使用一些像 ArrayList 这样的集合,它公开了 add(Eleem, index) 方法,这对插入最有效。谢谢
  • 您的用例是什么?是否可以更改算法以避免随机插入,例如通过顺序插入然后改组一次?

标签: java collections insertion


【解决方案1】:

有用的链接供您参考: http://www.coderfriendly.com/wp-content/uploads/2009/05/java_collections_v2.pdf

不完全确定您将如何阅读信息发布输入(以及它对您的重要性)。 Hashmap 或 ArrayList 是否有意义取决于您要做什么。也不确定您是否正在寻找线程安全的东西。 希望对您有所帮助。

【讨论】:

  • 什么??随机插入到 ArrayList 中?
  • @unbeli - 我可能误解了这个问题,但我认为您也没有清楚地理解它。
【解决方案2】:

使用List 的效率低下是该问题特有的。每次添加内容时,都必须重新索引每个后续元素 - 正如javadoc 所述:

移动当前在该位置的元素(如果有)和任何 右侧的后续元素(将其索引加一)。

根据您的问题/cmets,您似乎有一堆Objects,并且您正在对它们进行分类。我建议对这个问题更有效的解决方案是编写一个Comparator(或让你的对象实现Comparable),然后使用Collections.sort(list, comparator)(或Collections.sort(list))。

您可能会建议您的Objects 正在根据其他变量进行排序。在这种情况下,您可以创建Object 的扩展,将这些其他变量作为字段并扩展Comparable,并使用getOriginal() 之类的方法。您将这些包装的对象添加到列表中,排序,然后遍历列表,将原始对象(来自getOriginal())添加到新列表中。

有关集合排序算法的信息 - 请参阅SO question

【讨论】:

  • List是一个接口,不能低效。插入 LinkedList 是 O(1),但你需要先找到。 SkipList 可能会有所帮助,但它不在 JRE 中。
猜你喜欢
  • 2011-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-16
  • 2019-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多