【问题标题】:Accessing specific ArrayList elements, when the ArrayList changes frequently当 ArrayList 频繁更改时,访问特定的 ArrayList 元素
【发布时间】:2013-08-09 03:00:58
【问题描述】:

我有一个ArrayList,它存储对象Foo

假设我想将 10 个对象 Foo 添加到 ArrayList,我会执行以下操作:

for (int i = 0; i <10 ; i++){
    arraylist.add(new Foo());
}

虽然这个解决方案有效,但问题是,在第三个和第四个 Foo 已从数组列表中删除之后,我如何访问,比如第九个 Foo?

我不能简单地做

arraylist.get(9);

再说了,因为这会抛出IndexOutOfBoundsException

我希望能够让程序动态地执行此操作,因为在我的情况下,Foo 的数量不是固定的,它们可以随时删除。

【问题讨论】:

  • @Reimeus 有没有办法动态地做到这一点?因为在我的程序中,Foos 的数量是不固定的。
  • @user2519193:这完全取决于你想要做什么。如果你只想要最后一个,那很容易。如果您想在忽略删除的特定索引处获取项目,您可能应该设置为 null 而不是删除。

标签: java arraylist


【解决方案1】:

您需要按特定顺序排列项目,并且您可能并不总是记得在哪个索引处插入了哪个 foo,为此 Map&lt;Integer, Foo&gt; is perfect.

Map<Integer,Foo> map = new HashMap<Integer, Foo>();
map.put(1, new Foo());
map.put(2, new Foo());
etc

根据 cmets,map = TreeMap&lt;Integer, Foo&gt;() 可能会更好。

【讨论】:

  • HashMap 不保留插入顺序。 TreeMap 更好。
  • 谢谢,显然满足我的需要,我不应该使用 ArrayList 动态地做事。对其他所有人,对不起!我的问题措辞错误,所以每个人在技术上仍然正确回答!
  • 是的,这是真正的 CPerkins,但是如果您遍历键集,您将按顺序获得它们,尽管不是最佳的。
【解决方案2】:
arraylist.get(8 - numberOFDeletedElements);

8 而不是 9,因为索引从 0 开始,并且开头(删除之前)的第 9 个元素的索引为 8

arraylist.get(arraylist.size() - 2);

您可能根本不需要这个。因为所有的对象都是一样的。如果它们不同,那么您可能需要遍历数组并检查要查找元素的条件

【讨论】:

  • 如果他删除了他想要访问的元素之后的元素,那将不起作用。
【解决方案3】:

为您的Foo 创建一个equalTo() 方法,而不是使用ArrayListcontains() 方法。

【讨论】:

    【解决方案4】:

    如果你只关心最后一个元素,你总是可以这样做

    arraylist.get(arraylist.size() - 1)
    

    【讨论】:

      猜你喜欢
      • 2015-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-03
      • 2020-07-15
      • 1970-01-01
      • 2014-03-10
      • 1970-01-01
      相关资源
      最近更新 更多