【发布时间】:2013-09-30 12:00:01
【问题描述】:
我将两个ArrayLists 与以下代码合并。该代码正在运行并给我想要的结果,但我想要一个更高效的版本。以下是条件。
- 方法接受两个列表,并且两个列表的元素都按降序排列 (5,4,3,2)
- 方法接受一个整数来决定生成的
ArrayList的大小。 - 第一个输入列表的大小永远不会大于生成的
ArrayList的大小。
代码:
public ArrayList<Integer> mergeList(ArrayList<Integer> first,ArrayList<Integer> second, int n){
//case 1: when both list are null.
if(first == null && second == null )
return null;
//case 2: when first list is null but second list have elements
else if( first == null && second != null){
return second.size() >=n ? new ArrayList<Integer>(second.subList(0, n)) : second;
}
//case 3: when first list have record and second list is null
else if(first != null && second == null){
return first;
}
//case 4: when both list have elements
else {
first.addAll(second);
Collections.sort(first);
Collections.reverse(first);
return first.size()>=n ? new ArrayList<Integer>(first.subList(0, n)) : first;
}
}
}
【问题讨论】:
-
这太复杂了。
ArrayList按需扩展,因此无需预先分配(不需要参数int n);您应该只在开始时分配一次结果列表。我认为这里的目标是编写适当的合并。连接列表和排序将不是最好的解决方案。如果由于某种原因您仍想这样做,请按降序排序,这样您就不必颠倒列表。 -
@JimGarrison 参数 n 是要求的一部分,所以我无法避免,但我接受了您的建议并更新了我的代码。最新代码已上传。
-
结果列表是否也需要倒序排列?在输入或结果中是否允许重复?
标签: java data-structures collections arraylist merge