`

Java代码中可以优化性能的小细节

阅读更多

避免对boolean类型的判定
反例:

<figure class="highlight smalltalk"><table><tr> <td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td> <td class="code"><pre><span class="line">if(<span class="comment">"a"</span>.equles(<span class="comment">"a"</span>)==<span class="keyword">true</span>)`{</span><br><span class="line">}</span><br></pre></td> </tr></table></figure>

正例:

<figure class="highlight stylus"><table><tr> <td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td> <td class="code"><pre><span class="line"><span class="function"><span class="title">if</span><span class="params">(Objects.equles(<span class="string">"a"</span>,<span class="string">"a"</span>)</span></span>)`{</span><br><span class="line">}</span><br></pre></td> </tr></table></figure>

**多用条件判断符 **

反例:

<figure class="highlight coffeescript"><table><tr> <td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td> <td class="code"><pre><span class="line"><span class="keyword">if</span>(a&lt;<span class="number">0</span>)`<span class="javascript">{</span></span><br><span class="line"><span class="javascript"> <span class="keyword">return</span> <span class="number">0</span>;</span></span><br><span class="line"><span class="javascript">}<span class="keyword">else</span>{</span></span><br><span class="line"><span class="javascript"> <span class="keyword">return</span> <span class="number">1</span>;</span></span><br><span class="line"><span class="javascript"> }</span></span><br><span class="line"><span class="javascript"></span>``<span class="javascript"></span>` </span><br><span class="line">正例:</span><br></pre></td> </tr></table></figure>

a<0?0:1;

<figure class="highlight asciidoc"><table><tr> <td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td> <td class="code"><pre><span class="line"></span><br><span class="line">*<span class="strong">*避免使用instanceof、避免把子类向父类转型*</span><span class="strong">*</span></span><br><span class="line"><span class="strong">掌握好多态即可</span></span><br><span class="line"><span class="strong"></span></span><br><span class="line"><span class="strong"></span></span><br><span class="line"><span class="strong"></span></span><br><span class="line"><span class="strong">*</span><span class="strong">*建议多使用局部变量*</span><span class="strong">*</span></span><br><span class="line"><span class="strong">局部变量保存在栈中,占用的内存随着方法的执行完毕而被释放</span></span><br><span class="line"><span class="strong"></span></span><br><span class="line"><span class="strong">*</span><span class="strong">*多使用位运算代替算术运算*</span><span class="strong">*</span></span><br><span class="line"><span class="strong">就是可读性差点</span></span><br><span class="line"><span class="strong"></span></span><br><span class="line"><span class="strong">*</span><span class="strong">*一维数组和二维数组的恩怨情仇*</span><span class="strong">*</span></span><br><span class="line"><span class="strong">保存同样的数据使用一维数组和二维数组的区别是前者以时间换空间后者是以空间换时间</span></span><br><span class="line"><span class="strong"></span></span><br><span class="line"><span class="strong">*</span><span class="strong">*不要经常使用取反操作符*</span><span class="strong">*</span></span><br><span class="line"><span class="strong"></span></span><br><span class="line"><span class="strong">反例:</span></span><br></pre></td> </tr></table></figure>

if(!a<0)`{
return 0;
}else{
return 1;
}

<figure class="highlight plain"><table><tr> <td class="gutter"><pre><span class="line">1</span><br></pre></td> <td class="code"><pre><span class="line">正例:</span><br></pre></td> </tr></table></figure>

if(a>=0)`{
return 0;
}else{
return 1;
}

<figure class="highlight zephir"><table><tr> <td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td> <td class="code"><pre><span class="line"></span><br><span class="line">**快速操作一个超大<span class="keyword">List</span>的连续性数据**</span><br><span class="line"></span><br><span class="line">使用集合的`<span class="keyword">List</span>&lt;E&gt; subList(<span class="keyword">int</span> fromIndex,<span class="keyword">int</span> toIndex)`方法可以返回一个超大<span class="keyword">List</span>的一段连续性数据,此时对这个subList的所有操作比如`clear()`等操作都会影响到原<span class="keyword">List</span></span><br><span class="line"></span><br><span class="line">**当一个方法的返回值是<span class="keyword">List</span>的时候请返回一个size为<span class="number">0</span>的<span class="keyword">list</span>而不是<span class="keyword">null</span>从而避免空指针异常**</span><br><span class="line"></span><br><span class="line">**单个字符串连接时使用单引号代替双引号**</span><br><span class="line">反例:</span><br></pre></td> </tr></table></figure>

“abc”+“d”;

<figure class="highlight plain"><table><tr> <td class="gutter"><pre><span class="line">1</span><br></pre></td> <td class="code"><pre><span class="line">正例:</span><br></pre></td> </tr></table></figure>

“abc”+‘d’;

<figure class="highlight asciidoc"><table><tr> <td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td> <td class="code"><pre><span class="line">*<span class="strong">*大量字符串拼接时使用StringBuffer代替+*</span><span class="strong">*</span></span><br><span class="line"><span class="strong"></span></span><br><span class="line"><span class="strong">*</span><span class="strong">*切割字符串的时候使用StringTokenizer代替split*</span><span class="strong">*</span></span><br><span class="line"><span class="strong"></span></span><br><span class="line"><span class="strong">*</span><span class="strong">*提前计算出需要循环的次数*</span><span class="strong">*</span></span><br><span class="line"><span class="strong">反例:</span></span><br></pre></td> </tr></table></figure>

for(int i=0i<a.size();;i++){
}

<figure class="highlight plain"><table><tr> <td class="gutter"><pre><span class="line">1</span><br></pre></td> <td class="code"><pre><span class="line">正例:</span><br></pre></td> </tr></table></figure>

for(int i=0,n=a.size();i<n;i++){
}

<figure class="highlight asciidoc"><table><tr> <td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td> <td class="code"><pre><span class="line"></span><br><span class="line">*<span class="strong">*减少不必要的需要循环的次数*</span><span class="strong">*</span></span><br><span class="line"><span class="strong">反例:</span></span><br></pre></td> </tr></table></figure>

int index=-1;
for(int i=0,n=a.size();i<n;i++){
if(a.get(i)==3){
index=i;
}
}

<figure class="highlight plain"><table><tr> <td class="gutter"><pre><span class="line">1</span><br></pre></td> <td class="code"><pre><span class="line">正例:</span><br></pre></td> </tr></table></figure>

int index=-1;
for(int i=0,n=a.size();i<n;i++){
if(a.get(i)==3){
index=i;
break;
}
}

**不要在循环中改变数组/List的大小**

**使用`System.arrayCopy`进行复制数组**

**使用Buffer进行IO操作**

**释放资源的代码要放在finally代码块中**

**多用java.util.Obects工具类**




<h4 style="color:red">推荐阅读</h4>
 


1. [SpringCloud学习系列汇总](https://mp.weixin.qq.com/s/TL4w0u6QA-wFx19IH9Xs6A)    
2. [为什么一线大厂面试必问redis,有啥好问的?](https://mp.weixin.qq.com/s/NSojCEA-lF8ocR1XeuXbsg)    
3. [多线程面试必备基础知识汇总](https://mp.weixin.qq.com/s/c3ngvdAc6lAs4d1sIdg16Q/)  
4. [Java集合源码分析汇总-JDK1.8](https://mp.weixin.qq.com/s/UAGihOEUPmFnwrgkSJZqpQ)      
5. [Linux常用命令速查-汇总篇](https://mp.weixin.qq.com/s/WG4ZWfId-MRslWtcDtx0aA)      
6. [JVM系列文章汇总](https://mp.weixin.qq.com/s/uDftoMTwJqk7H9bfQaa0sw)      
7. [MySQL系列文章汇总](https://mp.weixin.qq.com/s/SUV1DRSFhOIksj9C_qC7aA) 
7. [RabbitMQ系列文章汇总](https://mp.weixin.qq.com/s/rDqhdBk879neFM_CZzK9Yw)    


<h4 style="color:red">博客所有文章首发于公众号《Java学习录》转载请保留
扫码关注公众号即可领取2000GJava学习资源 </h4>



![1](https://shiyujun.cn/img/gongzhonghao.jpg)
0
0
分享到:
评论

相关推荐

    Java性能优化的45个细节

    41. **代码优化**:遵循SOLID原则,编写可读、可维护的代码,也有助于性能。 42. **使用异步编程**:如CompletableFuture,可以提高系统吞吐量。 43. **并行化任务**:利用多核CPU,通过并行计算提高执行速度。 ...

    提高java代码性能各种技巧

    Java 代码性能优化技巧总结 Java 代码性能优化是每个 Java 开发者都需要掌握的重要技能。以下是对 Java 代码性能优化的各种技巧的总结: 字符串池的实现 在 Java 中,字符串池(String Intern Pool)是通过使用...

    高性能java代码优化建议

    "高性能java代码优化建议"这一主题涵盖了众多资深开发者积累的实践经验,旨在帮助开发者编写出更高效、性能更强的代码。以下是一些关键的知识点: 1. **避免过度使用同步**:在多线程环境中,过多的同步可能导致...

    Java性能优化的45个细节.pdf

    以上是Java性能优化的一些关键点,开发者在开发过程中应当根据具体情况合理运用这些细节,以提高Java程序的性能。这些细节的掌握和运用需要对Java编程有较深的理解和实践经验,能够帮助开发者编写出更高效、更优质的...

    Java编程中影响性能的细节

    在Java编程中,优化性能是开发者必须关注的重要环节。以下是一些关键的性能优化细节: 1. **使用单例模式**:单例模式可以确保一个类只有一个实例,从而节省资源和提高效率。不过,过度使用单例可能导致设计复杂性...

    44条Java代码优化建议

    Java代码优化是一个持续的过程,它包含了许多细节和技巧,能够帮助开发者编写出更高效、更易于维护的代码。在这44条Java代码优化建议中,我们可以提炼出一些核心的知识点,为Java编程实践提供参考。 首先,关于为...

    java 代码重构优化 Java 代码优化 java设计优化

    以上就是关于Java代码重构、优化以及设计优化的一些关键点,这些知识不仅能提升代码质量,还能帮助开发者更好地应对项目中的各种挑战。通过深入学习《重构-改善既有代码的设计》这样的经典书籍,你可以进一步提升...

    Java性能优化实战视频全集

    **4.10 常见Java代码优化法则** - **代码层面**: 如减少循环中的计算开销、使用更高效的数据结构等。 - **设计层面**: 采用合适的设计模式,提高代码的可扩展性和可维护性。 #### 五、高级进阶篇 **5.1 JVM垃圾...

    java代码优化细节总结1.0版本.zip

    Java代码优化是提升软件性能和效率的关键步骤,尤其是在大型企业级应用中,高效的代码能够显著降低服务器资源消耗,提高用户体验。以下是对`java代码优化细节总结1.0版本`的一些核心知识点的阐述: 1. **避免冗余...

    35 个 Java 代码性能优化总结

    ### 35个Java代码性能优化总结 #### 前言 代码优化是软件开发中的一个重要环节,尤其在Java这样的大型应用开发中更是至关重要。合理的优化不仅能够显著提高应用程序的性能,还能降低资源消耗,提升用户体验。本文将...

    Java程序性能优化.rar

    2. **代码优化** - **避免过度的对象创建**:通过对象池、重用对象、使用StringBuilder代替String连接等方法减少垃圾产生。 - **使用适当的数据结构**:根据需求选择ArrayList、LinkedList、HashSet、HashMap等,...

    java代码优化细节总结1.0版本.7z

    Java代码优化是提升程序性能、减少资源消耗的关键环节。这份"java代码优化细节总结1.0版本.7z"压缩包包含了一份详细的Java代码优化指南,适用于开发者在编写和优化Java程序时参考。以下是根据标题、描述以及压缩包内...

    C++代码转java工具

    在某些情况下,开发者可能需要将已有的C++代码转换为Java代码,以便在Java平台上运行或利用Java的生态系统。 标题“C++代码转Java工具”暗示了一个软件或服务的存在,它的功能是自动化C++源代码到Java源代码的转换...

    Java代码直接转化成smail代码工具(完整项目)

    Java代码和Smali代码是两种不同的编程语言,它们在Android应用开发中扮演着不同角色。Java是高级语言,而Smali是Dalvik虚拟机(DVM)的汇编语言,通常用于逆向工程和安全分析。这个“Java代码直接转化成Smali代码...

    必会的40个Java代码优化细节.pdf

    下面将逐一解析《必会的40个Java代码优化细节》中提及的一些重要知识点: 1. **使用单例模式**:单例模式能确保一个类只有一个实例,适用于控制资源访问、节约资源、实现跨线程通信。但不适用于所有场景,需谨慎...

    java细节优化代码1.0版本.7z

    首先,让我们探讨一下Java代码优化的一些关键方面: 1. **算法优化**:选择正确的数据结构和算法对性能有着直接影响。例如,使用哈希表(HashMap)代替链表(LinkedList)进行查找操作,可以显著提高效率。 2. **...

    java源代码查看工具.zip

    对于那些需要频繁查看或分析Java代码的开发者来说,这是一款不可或缺的辅助工具。 在实际应用中,此工具可以广泛应用于以下场景: 1. **逆向工程**:当没有源代码的情况下,需要分析或修改已有的二进制Java程序,...

Global site tag (gtag.js) - Google Analytics