Java 将ArrayList中的ArrayList与ArrayList进行比较
在下面的示例中,如何将Java 将ArrayList中的ArrayList与ArrayList进行比较,java,arraylist,compare,contains,Java,Arraylist,Compare,Contains,在下面的示例中,如何将ArrayList al4的内容与其他ArrayList的内容进行比较?以同样的方式,我将al1与al2进行了比较 import java.util.ArrayList; public class Details { public static void main(String[] args) { ArrayList<String> al1 = new ArrayList<String>(); al1.add
ArrayList al4
的内容与其他ArrayList
的内容进行比较?以同样的方式,我将al1
与al2
进行了比较
import java.util.ArrayList;
public class Details {
public static void main(String[] args) {
ArrayList<String> al1 = new ArrayList<String>();
al1.add("hi");
al1.add("How are you");
al1.add("Good Morning");
al1.add("bye");
al1.add("Good night");
ArrayList<String> al2 = new ArrayList<String>();
al2.add("Howdy");
al2.add("Good Evening");
al2.add("bye");
al2.add("Good night");
ArrayList<ArrayList<String>> al4 = new ArrayList<ArrayList<String>>();
al4.add(al1);
// Storing the comparison output in ArrayList<String>
ArrayList<String> al3 = new ArrayList<String>();
for (String temp : al1)
al3.add(al2.contains(temp) ? "Yes" : "No");
System.out.println(al3);
}
}
这取决于你的意思。您不能直接将
al4
与al2
进行比较,因为它们的类型不同:一个是ArrayList
,另一个是ArrayList
当您比较al1
和al2
时,您所做的是确定al1
的每个元素是否出现在al2
中的任何位置。我想这就是你想要的。您无法确定它是否发生在al2
中的同一位置
import java.util.ArrayList;
public class Details {
public static void main(String[] args) {
ArrayList<String> al1 = new ArrayList<String>();
al1.add("hi");
al1.add("How are you");
al1.add("Good Morning");
al1.add("bye");
al1.add("Good night");
ArrayList<String> al2 = new ArrayList<String>();
al2.add("Howdy");
al2.add("Good Evening");
al2.add("bye");
al2.add("Good night");
ArrayList<ArrayList<String>> al4 = new ArrayList<ArrayList<String>>();
al4.add(al1);
// Storing the comparison output in ArrayList<String>
ArrayList<String> al3 = new ArrayList<String>();
for (String temp : al1)
al3.add(al2.contains(temp) ? "Yes" : "No");
System.out.println(al3);
}
}
你应该做的第一件事是改进这种比较,这是相当低效的。由于您不关心al2
的顺序,因此应按如下方式重写比较:
ArrayList<String> al3 = new ArrayList<String>();
Set<String> al2set = new HashSet<String>(al2);
for (String temp : al1)
al3.add(al2set.contains(temp) ? "Yes" : "No");
这将为您提供一个平面ArrayList
,记录al4
列表中的每个元素,无论该元素是否在al2
中的某个位置
您可能希望结果是一个ArrayList
,以便结果模拟al4
的结构,在这种情况下,结果只会稍微复杂一些:
ArrayList<ArrayList<String>> al3list = new ArrayList<ArrayList<String>>();
Set<String> al2set = new HashSet<String>(al2);
for (List<String> tempList : al4) {
ArrayList<String> al3 = new ArrayList<String>();
for (String temp : tempList)
al3.add(al2set.contains(temp) ? "Yes" : "No");
al3list.add(al3);
}
ArrayList al3list=new ArrayList();
Set al2set=新哈希集(al2);
对于(列表圣殿骑士:al4){
ArrayList al3=新的ArrayList();
用于(字符串临时值:tempList)
al3.添加(al2set.contains(temp)-“是”:“否”);
al3list.add(al3);
}
执行此操作后,
a3list
将具有与al4
相同的结构,每个列表的每个元素将是“Yes”
或“No”
,这取决于al4
中的对应元素是否包含在al2
中的某个位置。您可以创建这样的方法
import java.util.ArrayList;
public class Details {
public static void main(String[] args) {
ArrayList<String> al1 = new ArrayList<String>();
al1.add("hi");
al1.add("How are you");
al1.add("Good Morning");
al1.add("bye");
al1.add("Good night");
ArrayList<String> al2 = new ArrayList<String>();
al2.add("Howdy");
al2.add("Good Evening");
al2.add("bye");
al2.add("Good night");
ArrayList<ArrayList<String>> al4 = new ArrayList<ArrayList<String>>();
al4.add(al1);
// Storing the comparison output in ArrayList<String>
ArrayList<String> al3 = new ArrayList<String>();
for (String temp : al1)
al3.add(al2.contains(temp) ? "Yes" : "No");
System.out.println(al3);
}
}
public static boolean[] compare(ArrayList<String> al1, ArrayList<String> al2) {
boolean result[] = new boolean[al1.size()]; // result
int i = 0; // index
/*
* Test if an element of al1 occurs in al2
*/
for(String s : al1) {
if(al2.contains(s)) {
result[i] = true;
}
else {
result[i] = false;
}
i++; // increment
}
return result;
}
公共静态布尔[]比较(ArrayList al1,ArrayList al2){
布尔结果[]=新布尔值[al1.size()];//结果
int i=0;//索引
/*
*测试al1元素是否出现在al2中
*/
用于(字符串s:al1){
如果(al2.包含){
结果[i]=真;
}
否则{
结果[i]=假;
}
i++;//增量
}
返回结果;
}
然后调用此方法并显示结果
boolean result[] = compare(al1, al2);
for(int i = 0; i < result.length; i++) {
System.out.print(result[i] + " ");
}
boolean result[]=compare(al1,al2);
for(int i=0;i
出色而透彻的解释。非常感谢,我真的很感激!在本例中,当我将另一个ArrayList
添加到al4
中时,在执行时,它似乎将上一个索引的副本添加到下一个索引中,以及应该存储在该索引中的正确值。@user2988501我不确定我是否理解了您的意思。我给出的代码将处理整个al4
。是否要将新列表添加到al4
,然后只处理最后一位?如果我误解了您的意图,您可能需要给出一个示例。是的,我将如何编辑for循环,以便在“al4”中添加另一个“ArrayList”时不会导致“al3list”中出现重复值。我发现,括号放错了位置!