• 【性能优化】高效代码篇(一)


    一、字符串

    1.使用String.intern()来节约内存
    2.长字符串拼接,显示的使用StringBuilder,来提高字符串的拼接性能

    二、慎重使用正则表达式,比如String.split(“指定一个正则表达式”)方法

    在编程语言中,使用的正则表达式库都是基于NFA自动机实现的,而NFA自动机存在回溯的问题
    所以能不用就不用
    如何避免回溯,使用懒惰、和独占模式
    1.贪婪模式"ab{1,3}c"
    正则表达式会匹配尽可能多的内容,回溯
    2.懒惰模式"ab{1,3}?c"
    尽可能少的重复匹配字符
    3.独占模式"ab{1,3}+bc"
    正则表达式会匹配尽可能多的内容,不回溯,匹配失败就会结束
    优化:
    1.少用贪婪,多用独占
    2.减少分支选择
    如:"(x|y|z)",尽量不使用
    其次可以提取共用模式,"(abcd|abef)"->"ab(cd|ef)"
    3.减少捕获嵌套
    ():一个捕获组
    (?:exp):不进行捕获
    如:"(<input.*?>)(.*?)(</input>)" -> "(?:<input.*?>)(.*?)(?:</input>)"

    三、ArrayList和LinkedList

    1.创建ArrayList对象时,尽量指定初始容量大小,防止扩容导致性能下降
    2.ArrayList在不发生扩容的情况下,在集合中间和尾部位置进行新增和删除操作时,ArrayList性能是高于LikedList的
    3.集合遍历场景,for(;;)和iterator()两种方式,
    for(;;)方式:ArrayList性能高于LinkedList(因为ArrayList支持随机访问;)
    iterator()方式:ArrayList性能约等于LinkedList性能
    所以,LinkedList请使用迭代器iterator来遍历元素,ArrayList使用for遍历元素
  • 相关阅读:
    判断回溯法中的标记数组vis在回溯的时候是否要取消标记?
    Linux多线程开发I
    答题小程序开发
    答题活动小程序
    今天来谈谈答题小程序的上下游生态
    挑战答题小程序V2.0
    可以免费出题的答题小程序
    挑战答题小程序上线了
    通过小程序反编译来谈谈小程序的分包加载机制?
    本文介绍下答题小程序V6.0
  • 原文地址:https://www.cnblogs.com/756623607-zhang/p/11141303.html
Copyright © 2020-2023  润新知