0

我使用的是安卓 2.3.3。我有一个mainArrayList<String>, 和 asubArrayList<String>其中的内容是mainArrayList<String>. 我希望将其subArrayList<String>mainArrayList<String>.

我该怎么做?

我尝试使用alMainArrayList.remove(alSubArrayList). 但它不起作用。有人能帮我吗?

前任:

alMainArrayList<String> = [1,+,(,2,*,(,3,+,4,),),)]
alSubArrayList<String> = [(,3,+,4,)]

有关更多信息,我正在开发一个计算器应用程序,其中我在ArrayList<String> alMainArrayList. 在执行子表达式的评估后,我希望将其从 alMainArrayList 中删除,然后将结果插入到指定索引处。代码符合。

alMainArrayList.remove(alSubArrayList)问题是,当我使用or时,我在 alSubArrayList 中的子表达式没有被删除alMainArrayList.removeAll(alSubArrayList)

这是一个循环,因此结果被添加到指定的索引处(没有先删除 subArrayList),循环进入无限循环。

要提供代码片段,有点困难。它们到处都是碎片。所以,如果有人明白我想说的话,请帮助我。

4

2 回答 2

1

您提供的代码告诉 Java 从alMainArrayList. 如果alMainArrayList真的声明为List<String>or ,这甚至不应该编译ArrayList<String。显然它不会改变,List因为它不包含对Lists 的引用。

话虽如此,您应该查看removeAll()。我相信这会做你想要的。

于 2012-12-14T03:15:26.397 回答
1

我为 ArrayList 找到了一个方法 subList()。

当您将其放在方法上时,这是根据帮助的信息。

subList() :::: 用于 ArrayList

将此列表的一部分连续元素作为视图返回。如果 start 等于 end,则返回的视图的长度为零。返回的子列表中发生的任何更改都将反映到原始列表中,反之亦然。该子列表也将支持原始列表支持的所有可选操作。

该方法可以作为一种方便的方法对原始列表的子范围进行一些操作,例如 list.subList(from, to).clear();

如果原始列表以其他方式而不是通过返回的 subList 进行修改,则返回的 subList 的行为将变为未定义。

返回的 subList 是 AbstractList 的子类。子类存储原始列表的偏移量、自身的大小和 modCount。如果原始列表实现了 RandomAccess 接口,则返回的子列表也实现了 RandomAccess 接口。

subList 的 set(int, Object), get(int), add(int, Object), remove(int), addAll(int, Collection) 和 removeRange(int, int) 方法首先检查边界,调整偏移量然后调用原始 AbstractList 的相应方法。返回的 subList 的 addAll(Collection c) 方法调用原来的 addAll(offset + size, c)。

subList 的 listIterator(int) 方法包装了原始列表迭代器。subList 的 iterator() 方法调用了原来的 listIterator() 方法,而 size() 方法仅仅返回了 subList 的大小。

如果原始列表的 modCount 不等于预期值,所有方法都会抛出 ConcurrentModificationException。

参数 start 子列表的起始索引(包括)。子列表的结束索引,(不包括)。

返回此列表的子列表视图,从 start(包括)开始,以 end(不包括)结束。如果 (start < 0 || end > size()) 抛出 IndexOutOfBoundsException

于 2012-12-16T06:38:10.490 回答