关于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();

以上就是在老师讲解作业后对自己代码中的问题的总结

时间: 2024-08-12 21:14:00

关于ArrayUtil代码的优化的相关文章

C++ 代码性能优化 -- 循环分割提高并行性

对于一个可结合和可交换的合并操作来说,比如整数的加法或乘法, 我们可以通过将一组合并操作分割成 2 个或更多的部分,并在最后合并结果来提高性能. 原理: 普通代码只能利用 CPU 的一个寄存器,分割后可以利用多个寄存器. 当分割达到一个数量时,寄存器用完,性能不再提升,甚至会开始下降. 用代码来描述,如下: // 一般情况下的代码 for (i = 1; i < n+1; i++) { res = res OPER i; } // 循环分割后代码 for (i = 1; i < n; i+=2

Java代码性能优化技巧

流方面: private FileOutputStream writer; writer = new FileOoutputStream(fileName); 使用BufferedOutputStream 对写入FileOutputStream的数据进行缓存 //将writer的类型由FileOutputStream 变更为BufferedOutputStream //private FileOutputStream writer; private BufferedOutputStream wr

Java 代码性能优化总结

35 个 Java 代码性能优化总结 前言 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了.代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨:但是如果有足够的时间开发.维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,对于代码的运行效率

关于前端代码性能优化问题

以下观点纯属个人看法: 对于一个刚接触前端不久的人来说,前端的代码质量是很重要的一部分,毕竟关系到性能问题.个人认为关于代码性能优化主要由这几方面:HTML.CSS.Javascript和HTTP,所以对这四个方面的优化能提高浏览器的性能.个人知识面有限,只有学到以下的知识,另外的还没涉及,不足之处还请体谅. 一. HTML 1.首先是对HTML5的充分熟悉和理解,理解标签的语义化,减少对标签的重定义. 2.命名的规范化,对id.class.name的规范命名有助于整体代码的构建,方便他人的理解

代码的优化

在VS中,有两个编译器开关会影响生成的代码的优化: 一个是在项目属性->生成->优化代码选项,如果没有选中该选项,则生成的IL代码是没有经过优化的,在IL文件中会包含很多NOP指令,这些指令是空操作指令,作用是方便设置断点,在流程控制指令后边都会添加NOP指令,对于下面的简单代码: static class Program { /// <summary> /// 应用程序的主入口点. /// </summary> [STAThread] static void Main

Python 代码性能优化技巧(转)

原文:Python 代码性能优化技巧 Python 代码优化常见技巧 代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构.优化.扩展以及文档相关的事情通常需要消耗 80% 的工作量.优化通常包含两方面的内容:减小代码的体积,提高代码的运行效率. 改进算法,选择合适的数据结构 一个良好的算法能够对性能起到关键作用,因此性能改进的首要点是对算法的改进.在算法的时间复杂度排序上依次是: O(1) -> O(lg n) -> O(

iOS对项目中所有加阴影的代码进行优化

1. 对项目中所有加阴影的代码进行优化 目前项目中尤其是表格单元格中使用如下加阴影代码严重影响性能(5.2.5航班查询结果页卡顿的原因)     self.cellBG.layer.shadowColor = [[UIColor colorWithRed:0.8 green:0.8 blue:0.8 alpha:1] CGColor];     self.cellBG.layer.shadowOffset = CGSizeMake(1, 1);     self.cellBG.layer.sha

Html代码seo优化最佳布局实例讲解

搜索引擎对html代码是非常优化的,所以html的优化是做好推广的第一步.一个符合seo规则的代码大体如下界面所示. 1.<!–木庄网络博客–> 这个东西是些页面注释的,可以在这里加我的"木庄网络博客",但过多关键字可能被搜索引擎惩罚! 2.<html> 这个是代码开头 结尾时和</html>对应. 3.<head> 头标记结尾用</head> 4.<title>(木庄网络博客-勤记录 懂分享)</title

C6000代码层面优化(一)

2014年8月7日,看了一片很长见识的博文,关于DSP如何优化的,有一个问题没有搞通,“百度”一下关键字,居然搜查了一模一样的博文N片,现在也搞不懂这篇博文的原创作者是谁了.反正我感觉直接转摘过去,要是消化不掉,也没啥意思,所以我把我可以理解消化的就先记录下来吧. 一.双重循环或多重循环在保证功能的前提下,减少嵌套循环的层数,原因有二个,如下: 1)优化器优化时只在最内层循环中形成一个 pipeline,这样循环语句就不能充分利用C6 的软件流水线,而且对于内部循环的次数较少的情况,消耗在 pr