在应用“最佳做法”时,优化此代码以使其更有效的最佳方法是什么?这只是一个简单的学校项目而且有效,我已经测试过了。但我觉得有一种更好,更有效的方法来编写这种方法。你觉得怎么样?
getMax()
方法
检索中的最大数字
阵列。但是如果数组是空的呢
返回-1
。nElems只是一个变量,用于跟踪数组中存在多少元素。
array
是在类的开头声明的私有数组。
public int getMax() {
int k = 0;
int max = array[0];
for(int j=0; j<nElems; j++) {
if(max < array[j])
max = array[j];
}
if(k == nElems)
return -1;
else return max;
} // end of method
哦,我该如何命名我的k变量以使其更具可读性?其目的是为0,因此可以根据数组中元素的数量来检查,以返回-1或最大数字;
假设所有数组值均为正值。
答案 0 :(得分:4)
您不需要使用nElems
跟踪数组中的元素数量,除非您的意思是您有一个部分填充的数组,而nElems
是其中实际的插槽数有价值。更有可能的是,您应该使用array.length
来检查数组的长度。
您不需要变量k
为“0”。文字0
是0的精确表示。因此,如果要在数组为空时返回-1,则可以使用
if (array.length == 0)
return -1;
也就是说,为空数组返回-1有点奇怪,因为-1应该是该方法的有效结果。
答案 1 :(得分:3)
它的目的是为0,所以它可能是 检查元素的数量 在数组中返回-1或 最高的数字;
零不需要名称 - 如果您的意思是0,请使用文字0
。
你的循环很好。您可以尝试优化它,但它们不一定有用。几乎总是你可以将这种本地化的“锁孔”优化留给JIT。如果你只是想尝试一些东西作为学习练习,那么你可以尝试如下:
numElem
不是您展开次数的倍数,请注意不要错误地访问错误的索引。Integer.MAX_VALUE
的值,我并不是说这些都会产生影响,无论是更快还是更慢,但他们都可以。所以运行它们并计算每个进度的速度。你最有可能学到的是,与将其留给JIT相比,这些东西不值得你花时间。但你永远不知道; - )
可以清理周围的代码,使其更易于理解,而不是让它更快。例如:
public int getMax() {
int max = -1;
if (nElems > 0) {
max = array[0];
for(int j=1; j<nElems; j++) {
if(max < array[j])
max = array[j];
}
}
return max;
}
这也会删除代码中的错误,如果数组大小为0,那么您可以访问第二行中的超出范围。 ColinD这样做的方式同样好,我为了变化而展示了不同的东西。
这是较短的代码,假设所有值都是非负的:
public int getMax() {
int max = -1;
for(int j=0; j<nElems; j++) {
if(max < array[j])
max = array[j];
}
return max;
}
答案 2 :(得分:1)
我找到的最基本的原语如int .. 使用Integer而不是int。
Integer[] arr = { 6, 7, 10, 15, 2, 4, 8 };
Integer max = Collections.max( Arrays.asList(arr) );
并完成..: - )
答案 3 :(得分:0)
理论上,在多处理器(k处理器)系统上,您可以通过将列表划分为k个子列表来加快速度。产生一个进程以找到每个子列表的最大值,然后找到最大值的最大值。
如果
,您可能会或可能不会加速答案 4 :(得分:-1)
看看http://www.sorting-algorithms.com/它有一些排序算法,解释和动画,可以让你很好地了解排序过程中发生了什么。希望它有所帮助。