我的任务是制作一个采用两个列表并发现列表中哪些整数是常见的方法。我决定使用ArrayLists,因为它们是可变的,并且使用嵌套的for循环迭代两个列表以确定公用整数。我不确定ArrayLists是否可以作为方法的返回类型,所以我决定尝试使ArrayList成为常规数组,但是使用以下代码得到了java.lang异常。我该如何解决?
import java.util.*;
import java.util.ArrayList;
public class Lab1InJava{
public static void main(String [] args){
ArrayList<Integer> listUno = new ArrayList<Integer>();
listUno.add(4);
listUno.add(3);
listUno.add(2);
listUno.add(1);
ArrayList<Integer> listDos = new ArrayList<Integer>();
listDos.add(4);
listDos.add(3);
listDos.add(2);
listDos.add(1);
System.out.println(inCommon(listUno, listDos));
}
public static Object[] inCommon(ArrayList<Integer> list1, ArrayList<Integer> list2){
Collections.sort(list1);
Collections.sort(list2);
ArrayList<Integer> newList3 = new ArrayList<Integer>();
for (int indexOne = 0; indexOne<list1.size(); indexOne++)
for(int indexTwo = 0; indexTwo<list2.size(); indexTwo++)
if (list1.get(indexOne) == list2.get(indexTwo))
newList3.add(list1.get(indexOne));
Object[] newArray = newList3.toArray();
for(Object o : newArray) {
String s = (String) o;
System.out.println(o);
}
return newArray;
}
}
答案 0 :(得分:1)
任何对象都可以是返回类型,包括ArrayList
。 ArrayList
有一个名为contains的方法,可用于比较列表,如下所示:
public static void main(String args[]) {
ArrayList<Integer> listUno = new ArrayList<>();
listUno.add(4);
listUno.add(5);
listUno.add(2);
listUno.add(2);
ArrayList<Integer> listDos = new ArrayList<>();
listDos.add(4);
listDos.add(3);
listDos.add(2);
listDos.add(2);
System.out.println(inCommon(listUno, listDos));
}
public static ArrayList<Integer> inCommon(ArrayList<Integer> list1, ArrayList<Integer> list2) {
ArrayList<Integer> list3 = new ArrayList<>();
HashSet<Integer> set = new HashSet<>();
for (int i : list1) {
if (list2.contains(i)) {
set.add(i);
}
}
list3.addAll(set);
return list3;
}
输出:
[2, 4]