3 回答
TA贡献1868条经验 获得超4个赞
您也可以按照您的步骤执行这个简单的过程。1)比较元素。2)比较顺序。
import java.util.*;
class Stack1
{
public static void main(String args[])
{
ArrayList<String> list=new ArrayList<String>();
list.add("First");
list.add("name");
list.add("is");
list.add("Jay");
ArrayList<String> list2=new ArrayList<String>();
list2.add("First");
list2.add("name");
list2.add("is");
list2.add("Sudeep");
ArrayList<String> list3=new ArrayList<String>();
for(int i=0;i<list2.size();i++)
{
for(int j=0;j<list.size();j++)
{
if(list2.contains(list.get(j))==true)
{
if(list2.get(i)==list.get(j))
{
list3.add(list2.get(i));
}
}
else{ break; }
}
}
if(list.equals(list3))
{
System.out.println("true");
}
else{System.out.println("false");}
}
}
TA贡献1875条经验 获得超3个赞
一种方法是首先创建一个名为 2 的列表的副本list2Copy,然后删除list2Copy中不存在的所有元素list1。现在你只需要比较它们是否完全相等。
List<Integer> list1 = Arrays.asList(1,3,5);
List<Integer> list2 = Arrays.asList(1,2,3,4,5);
ArrayList<Integer> list2Copy = new ArrayList<>(list2);
list2Copy.removeIf(x -> !list1.contains(x));
return list1.equals(list2Copy);
这是另一种时间复杂度较小的方法:
if (list1.size() > list2.size()) {
// definitely not same order
return false;
}
int list1Index = 0;
for (int i = 0 ; i < list2.size() ; i++) {
if (Objects.equals(list2.get(i), list1.get(list1Index))) {
list1Index++;
if (list1Index == list1.size()) {
return true;
}
}
}
// at the end, list1Index should be the same as list1.size() if list2 is in the same order.
return false;
TA贡献1851条经验 获得超5个赞
Arraylist 是索引的,因此您可以遍历最小的列表,然后通过比较索引处的值来检查不匹配。只有当两个列表中的元素顺序正确(一个列表是另一个列表的子集,并且元素以相同的顺序相同)时,才能以有效的方式执行相同操作的方法才会返回 true。
private boolean checkForEqualityInorder(List<String> list1, List<String> list2) {
if (list1.size() < list2.size()) {
for (int i=0; i <list1.size(); i++){
if( !list1.get(i).equals(list2.get(i))) {
return false;
}
}
} else {
for (int i=0; i <list2.size(); i++){
if( !list2.get(i).equals(list1.get(i))) {
return false;
}
}
}
return true;
}
上面的方法接受两个列表,并且只有当一个是另一个的子集时才会返回 true(按顺序检查)。
为您的问题增强相同的方法:
private boolean checkForEqualityInorder(List<String> list1, List<String> list2) {
for (int i=0, k=0; i <list1.size(); i++, k++){
if (list2.get(k).startsWith("random")) {
i--;
continue;
}
if(!list1.get(i).equals(list2.get(k))) {
return false;
}
}
return true;
}
添加回答
举报
