gpt4 book ai didi

java - 提高合并两个 ArrayList 的性能

转载 作者:太空宇宙 更新时间:2023-11-04 07:23:09 25 4
gpt4 key购买 nike

我正在使用以下代码合并两个ArrayList。该代码正在运行并给了我想要的结果,但我想要一个更有效的版本。这是条件。

  1. 方法接受两个列表,并且两个列表都包含按降序排列的元素 (5,4,3,2)
  2. 方法接受一个整数来决定生成的 ArrayList 的大小。
  3. 第一个输入列表的大小永远不会大于生成的 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;
}
}

}

最佳答案

这取决于您所说的“更高效”是什么意思。

在什么方面?内存、CPU、可读性?

根据上面的代码,我做出以下假设:

  • 可读性比没有任何分析测量/要求的纯粹性能/内存消耗更重要“程序优化的第一条规则:不要这样做。程序优化的第二条规则(仅限专家!):暂时不要这样做。” — 迈克尔·A· jackson
  • 优先选择 null 对象模式而不是返回 null
  • 重复的元素是可取的/必需的
  • 使用 Comparator执行反向操作排序
<小时/>
private List<Integer> mergeList(List<Integer> list1, List<Integer> list2, final int newSize) {

// Enforce null object pattern
if (list1 == null) {
list1 = Collections.emptyList();
}
if (list2 == null) {
list2 = Collections.emptyList();
}

// If duplicates are not desirable, a TreeSet would perform automatic sorting.
List<Integer> result = new ArrayList<Integer>(list1);
result.addAll(list2);

Comparator<Integer> reverseSortComparator = new Comparator<Integer>() {

@Override
public int compare(final Integer o1, final Integer o2) {
return o2.compareTo(o1);
}
};

Collections.sort(result, reverseSortComparator);

if (result.size() > newSize) {
return result.subList(0, newSize);
} else {
return result;
}
}

关于java - 提高合并两个 ArrayList 的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18995685/

25 4 0