在下面的示例中,我如何将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);
}
}
al3
[No, No, No, Yes, Yes]
答案 0 :(得分:1)
这取决于你的意思。您不能直接将al4
与al2
进行比较,因为它们的类型不同:一个是ArrayList<String>
,另一个是ArrayList<ArrayList<String>>
当您比较al1
和al2
时,您正在做的是为al1
的每个元素确定它是否发生在{{>任何地方 al2
1}}。我认为这就是你想要的。您不决定它是否出现在al2
的同一位置。
你应该做的第一件事是改进这种比较,这是相当低效的。由于您不关心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");
这样效率更高,因为您不必为每次查找遍历整个al2
。
现在,如果您想将列表列表与列表进行比较,我只能假设您想要告诉al4
中任何列表的每个元素,它是否出现在{ {1}}。如果是这样,那么你想要
al2
对于ArrayList<String> al3 = new ArrayList<String>();
Set<String> al2set = new HashSet<String>(al2);
for (List<String> tempList : al4)
for (String temp : tempList)
al3.add(al2set.contains(temp) ? "Yes" : "No");
列表中的每个元素,这将为您提供一个单ArrayList<String>
个记录,该元素是否位于al4
某处。
您可能希望结果为al2
,因此结果会模仿ArrayList<ArrayList<String>>
的结构,在这种情况下,它只会稍微复杂一些:
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);
}
将具有与a3list
相同的结构,并且每个列表的每个元素都将是al4
或"Yes"
,具体取决于是否相应"No"
中的元素包含在al4
中的某个位置。
答案 1 :(得分:1)
您可以创建这样的方法。
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;
}
然后可以调用此方法并显示结果
boolean result[] = compare(al1, al2);
for(int i = 0; i < result.length; i++) {
System.out.print(result[i] + " ");
}