比较两个ArrayList - 一个作为另一个的子集

4
我知道我们可以在比较两个ArrayList时使用containsAll方法来检查一个是否是另一个的子集。但这就是我想要的。考虑一个ArrayList,如下:
ArrayList super = 1,2,3,4,5,6,7,8,9,10
还有另一个:
ArrayList sub1 = 1,2,3,4
和另一个:
ArrayList sub2 = 2,4,6,8。
现在,如果我执行以下代码:
super.containsAll(sub1)
它会评估为true,因为sub1包含在super中。
如果我执行super.containsAll(sub2),它也会评估为true,因为数字2、4、6和8都包含在super中。
我想知道是否有一种方式可以检查两个ArrayList,使得super.containsAll(sub2)评估为false,因为sub2中的数字没有以相同的顺序出现在super中。

“order”是什么意思?在“sub2”中,“2”位于索引0,而在“super”中位于索引1?此外,您不能使用“super”。 - Sotirios Delimanolis
@CodinginCircles,sub2中的数字显示出现在super中相同的顺序,尽管super在子集中的项之间有其他条目。此外,ArrayLists中的条目不是唯一的,因此如果super为{1,2,3,4,6,8,2,4,6,8},您希望出现什么行为? - Stochastically
我的意思是,在2和4(3)之间,4和6(5)之间,6和8(7)之间都有数字,所以我希望它的值为false。除非它们按照在超级ArrayList中出现的严格顺序,否则它应该始终为false。另一个例子是sub3 = 2,1。它也是true,但我希望它为false。 - CodingInCircles
你看过比较器吗?使用比较器,你可以编写equal()方法,然后框架会进行排序等操作。http://docs.oracle.com/javase/6/docs/api/java/util/Comparator.html - bakoyaro
2个回答

7

0

我猜你必须自己实现它。你应该遍历super,如果super(i).equals(sub2(0)),则检查接下来的项是否与sub2的相同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接