gpt4 book ai didi

java - 从集合中提取信息 - 可读性还是性能?

转载 作者:行者123 更新时间:2023-12-02 00:57:23 25 4
gpt4 key购买 nike

有时需要从集合中提取多个信息。

但是做到这一点的最佳实践是什么?

可读性高于性能

是否必须单独迭代集合以获取任何信息?然后我们就会有 n 次循环来提高性能。

另一方面,这些方法很容易理解,因为很容易读取从集合中提取的信息。

简单示例:

int max = determineMax(new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7)));
int sum = calculateSum(new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7)));
...
private int determineMax(ArrayList<Integer> integers) {
int max = 0;
for (Integer oneInteger : integers) {
max = Math.max(max, oneInteger);
}
return max;
}

private int calculateSum(ArrayList<Integer> integers) {
int sum = 0;
for (Integer oneInteger : integers) {
sum += oneInteger;
}
return sum;
}

性能高于可读性

另一种解决方案是循环一次,但随后需要返回许多变量。对于这种方法,我们需要使用数组或为返回值创建一个人工类。

简单示例:

int[] extractedInformation = extractInformation(new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7)));
...
private int[] extractInformation(ArrayList<Integer> integers) {
int sum = 0;
int max = 0;
for (Integer oneInteger : integers) {
sum += oneInteger;
max = Math.max(max, oneInteger);
}
return new int[]{sum, max};
}

最佳答案

您可能渴望性能,但在现实世界中,项目如此庞大,而且您并不是唯一从事该项目的人。

我想说可读性和可维护性应该比性能更受青睐。您提供的示例不遵循封装。

建议一个方法应该只做一件事,并且方法名称应该反射(reflect)这一件事。

有时您可以不遵循它并追求性能,但前提是性能下降明显。

通常,只有当时间复杂度因某种幂而不同时,您才会看到明显的差异,例如 O(n)、O(n2)。

尽管第二个似乎确实运行得更快,但事实确实如此。但它们仍然被称为线性,因为 O(n) + O(n) 并不等于 2*O(n)。

简而言之,现在的计算机太快了。您不应该为了较小的性能提升而放弃可读性和可维护性。

你的例子是一个极端的例子。大多数时候你不会遇到这种事情。考虑一下您是否只需要总和或只需要最大值。您将再定义两个方法,否则当您要求一个方法时您将得到两个结果,这对性能也不利。

这还取决于您大多数时候要做什么。

关于java - 从集合中提取信息 - 可读性还是性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61170287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com