关于ArrayUtil代码的优化
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于ArrayUtil代码的优化相关的知识,希望对你有一定的参考价值。
public int[] removeZero(int[] oldArray) { //传进空数组是返回空数组 if(oldArray == null) return null; int count = 0; //统计非零元素个数 int b[] = new int[oldArray.length]; //先统计非零元素个数,并将非零元素存入一个和原数组同样大小的新数组 for(int i=0; i < oldArray.length; i++) { if(oldArray[i] != 0) { b[count++] = oldArray[i]; } } //初始化一个元素个数为非零元素个数的新数组 int newArray[] = new int[count]; //将非零元素copy到新数组 System.arraycopy(b, 0, newArray, 0, count); return newArray; }
代码存在以下几个问题:
1.首先是括号缩进 最好是符合JAVA标准
标准的 Java 括号语法: public static void main(String[] args) { }
因为它是标准的,所以遇到的大部分代码(比如尚未编写,但可能付费维护的代码)很可能是以这种方式编写的。Eclipse 确实 允许采用你喜欢的任何方式定义代码风格和格式化代码。但是,如果不熟悉 Java,你可能还没有形成自己的风格。
2.对代码的边界条件进行判断
例如数组为空或者数组为null 分别应该怎么判断
3.对if() while() for()函数体,哪怕使用一行代码,最好也加上括号,因为以后极有可能对代码进行优化重构,加上括号避免出错
if(array == null) { return null; }
4.对于返回一个数组可以用Arrays.copyof()来进行优化
int newArray[] = new int[count]; //将非零元素copy到新数组 System.arraycopy(b, 0, newArray, 0, count); return newArray; //对于返回一个数组可以用Arrays.copyof()来进行优化 return Arrays.copyof(b, count);
5. 对可以局部化处理的变量最好在局部定义
int j = 0; for(j = 0; j<a.length; j++) { } //可以替换成 for(int j = 0; j<a.length; j++) { }
6.对有具体功能的代码进行重构
for(n = 2; n < max; n++) { if( count < max) { //判断当前n是不是素数 int i = 2; while(i < n) { if(n % i == 0) break; if(n % i != 0) i++; } if(i == n) { //将素数统计出来 Array[count++] = n; } } }
可以将判断素数的功能拆分出来
for(int n = 2; n < max; n++) { if(isPrime(n)) { array[count++] = n; } } //以下是素数功能拆分 private boolean isPrime(int n) { //判断当前n是不是素数 int i = 2; while(i < n) { if(n % i == 0) break; if(n % i != 0) i++; } return i == n; }
7.频繁对字符串进行操作时最好使用StringBuiler来进行处理
public String join(int[] array, String seperator) { String s = null; if(array.length == 0) return ""; s = Integer.toString(array[0]); if(array.length > 1) { s = s + seperator; for(int i=1; i<array.length-1; i++) s = s + array[i] + seperator; s = s + array[array.length -1]; } return s; }
可以优化成这样
StringBuilder buffer = new StringBuilder(); for(int i=0; i<array.length; i++) { buffer.append(array[i]); if(i < array.length -1) { buffer.append(seperator); } } return buffer.toString();
以上就是在老师讲解作业后对自己代码中的问题的总结
以上是关于关于ArrayUtil代码的优化的主要内容,如果未能解决你的问题,请参考以下文章
优化 C# 代码片段、ObservableCollection 和 AddRange