我正在尝试使用ArrayLists
实现 quicksort 。但是我不知道如何创建一个包含所有整数的Arraylist<Integer>
。我觉得有一种方法可以用来轻松做到这一点。这是我的代码
public static ArrayList<Integer> quicksort(ArrayList<Integer> arr, int min, int max) {
int pivot = (min + max)/2;
if (arr.size() <= 1) {
return arr;
}
else {
ArrayList<Integer> less = new ArrayList<Integer>();
ArrayList<Integer> greater = new ArrayList<Integer>();
for (int i : arr) {
if ( i < arr.get(pivot)) {
less.add(i);
}
else {
greater.add(i);
}
}
return quicksort(less, min, pivot) + arr.get(pivot) + quicksort(greater, pivot + 1, max);
}
}
答案 0 :(得分:2)
您可以使用addAll()
:
List<Integer> result = new ArrayList<>(less.size() + greater.size() + 1);
result.addAll(less);
result.add(pivot);
result.addAll(greater);
答案 1 :(得分:1)
您可以创建一个方法,为您合并Lists
。像这样的东西
private List<Integer> mergeLists(List<Integer> list1, Integer element, List<Integer> list2) {
List<Integer> mergedList = new ArrayList<>();
mergedList.addAll(list1);
mergedList.add(element);
mergedList.addAll(list2);
return mergedList;
}
并在return语句中调用此方法。
return mergeLists(quicksort(less, min, pivot), arr.get(pivot), quicksort(greater, pivot + 1, max));
请注意,这只是一个示例,您可以根据需要进行修改。我最初有vararg
List<Integer>
但发现在这种情况下它不会有用。
如果您希望合并超过2个列表(仅限相同类型的列表),则可以执行此类操作。
private List<Integer> mergeLists(List<Integer>... lists) {
List<Integer> mergedList = new ArrayList<>();
for (List<Integer> list : lists) {
mergedList.addAll(list);
}
return mergedList;
}
并使用这样的方法。
List<Integer> combinedList = mergeLists(list1, list2, list3, list4);