游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

编码5分钟,优化两小时?14条yyds编码规范

  编码5分钟,优化两小时?
  如何更规范化编写Java代码?
  其中最重要的几点当属:
  提高代码性能
  使代码远离Bug
  令代码更优雅
  浩说在这里为大家整理14条yyds编码规范
  记得
  分享收藏
  给需要的他哦
  一、MyBatis不要为了多个查询条件而写11
  【此有争议,大家对于此的多数验证是未受影响,大家在开发中各取所需,仅持指导性意见】
  当遇到多个查询条件,使用where11可以很方便的解决我们的问题,但是这样很可能会造成非常大的性能损失,因为添加了where11的过滤条件之后,数据库系统就无法使用索引等查询优化策略,数据库系统将会被迫对每行数据进行扫描(即全表扫描)以比较此行是否满足过滤条件,当表中的数据量较大时查询速度会非常慢;此外,还会存在SQL注入的风险。
  反例:selectidqueryBookInfoparameterTypecom。tjt。platform。entity。BookInforesultTypejava。lang。Integerselectcount()fromtruleBookInfotwhere11iftesttitle!nullandtitle!ANDtitle{title}ififtestauthor!nullandauthor!ANDauthor{author}ifselect
  正例:selectidqueryBookInfoparameterTypecom。tjt。platform。entity。BookInforesultTypejava。lang。Integerselectcount()fromtruleBookInfotwhereiftesttitle!nullandtitle!title{title}ififtestauthor!nullandauthor!ANDauthor{author}ifwhereselect
  UPDATE操作也一样,可以用标记代替11。
  二、迭代entrySet()获取Map的key和value
  当循环中只需要获取Map的主键key时,迭代keySet()是正确的;但是,当需要主键key和取值value时,迭代entrySet()才是更高效的做法,其比先迭代keySet()后再去通过get取值性能更佳。
  反例:Map获取value反例:HashMapString,StringmapnewHashMap();for(Stringkey:map。keySet()){Stringvaluemap。get(key);}
  正例:Map获取keyvalue正例:HashMapString,StringmapnewHashMap();for(Map。EntryString,Stringentry:map。entrySet()){Stringkeyentry。getKey();Stringvalueentry。getValue();}
  三、使用Collection。isEmpty()检测空
  使用Collection。size()来检测是否为空在逻辑上没有问题,但是使用Collection。isEmpty()使得代码更易读,并且可以获得更好的性能;除此之外,任何Collection。isEmpty()实现的时间复杂度都是O(1),不需要多次循环遍历,但是某些通过Collection。size()方法实现的时间复杂度可能是O(n)。O(1)纬度减少循环次数例子
  反例:LinkedListObjectcollectionnewLinkedList();if(collection。size()0){System。out。println(collectionisempty。);}
  正例:LinkedListObjectcollectionnewLinkedList();if(collection。isEmpty()){System。out。println(collectionisempty。);}检测是否为null可以使用CollectionUtils。isEmpty()if(CollectionUtils。isEmpty(collection)){System。out。println(collectionisnull。);}
  四、初始化集合时尽量指定其大小
  尽量在初始化时指定集合的大小,能有效减少集合的扩容次数,因为集合每次扩容的时间复杂度很可能时O(n),耗费时间和性能。
  反例:初始化list,往list中添加元素反例:int〔〕arrnewint〔〕{1,2,3,4};ListIntegerlistnewArrayList();for(inti:arr){list。add(i);}
  正例:初始化list,往list中添加元素正例:int〔〕arrnewint〔〕{1,2,3,4};指定集合list的容量大小ListIntegerlistnewArrayList(arr。length);for(inti:arr){list。add(i);}
  五、若需频繁调用Collection。contains方法则使用Set
  在Java集合类库中,List的contains方法普遍时间复杂度为O(n),若代码中需要频繁调用contains方法查找数据则先将集合list转换成HashSet实现,将O(n)的时间复杂度将为O(1)。
  反例:频繁调用Collection。contains()反例ListObjectlistnewArrayList();for(inti0;iInteger。MAXVALUE;i){时间复杂度为O(n)if(list。contains(i))System。out。println(listcontainsi);}
  正例:频繁调用Collection。contains()正例ListObjectlistnewArrayList();SetObjectsetnewHashSet();for(inti0;iInteger。MAXVALUE;i){时间复杂度为O(1)if(set。contains(i)){System。out。println(listcontainsi);}}
  六、使用静态代码块实现赋值静态成员变量
  对于集合类型的静态成员变量,应该使用静态代码块赋值,而不是使用集合实现来赋值。
  反例:赋值静态成员变量反例privatestaticMapString,IntegermapnewHashMapString,Integer(){{map。put(Leo,1);map。put(Familyloving,2);map。put(Coldontheoutsidepassionateontheinside,3);}};privatestaticListStringlistnewArrayList(){{list。add(Sagittarius);list。add(Charming);list。add(Perfectionist);}};
  正例:赋值静态成员变量正例privatestaticMapString,IntegermapnewHashMapString,Integer();static{map。put(Leo,1);map。put(Familyloving,2);map。put(Coldontheoutsidepassionateontheinside,3);}privatestaticListStringlistnewArrayList();static{list。add(Sagittarius);list。add(Charming);list。add(Perfectionist);}
  七、工具类中屏蔽构造函数
  工具类是一堆静态字段和函数的集合,其不应该被实例化;但是,Java为每个没有明确定义构造函数的类添加了一个隐式公有构造函数,为了避免不必要的实例化,应该显式定义私有构造函数来屏蔽这个隐式公有构造函数。
  反例:publicclassPasswordUtils{工具类构造函数反例privatestaticfinalLoggerLOGLoggerFactory。getLogger(PasswordUtils。class);publicstaticfinalStringDEFAULTCRYPTALGOPBEWithMD5AndDES;publicstaticStringencryptPassword(StringaPassword)throwsIOException{returnnewPasswordUtils(aPassword)。encrypt();}
  正例:publicclassPasswordUtils{工具类构造函数正例privatestaticfinalLoggerLOGLoggerFactory。getLogger(PasswordUtils。class);定义私有构造函数来屏蔽这个隐式公有构造函数privatePasswordUtils(){}publicstaticfinalStringDEFAULTCRYPTALGOPBEWithMD5AndDES;publicstaticStringencryptPassword(StringaPassword)throwsIOException{returnnewPasswordUtils(aPassword)。encrypt();}
  八、删除多余的异常捕获并抛出
  用catch语句捕获异常后,若什么也不进行处理,就只是让异常重新抛出,这跟不捕获异常的效果一样,可以删除这块代码或添加别的处理。
  反例:多余异常反例privatestaticStringfileReader(StringfileName)throwsIOException{try(BufferedReaderreadernewBufferedReader(newFileReader(fileName))){Stringline;StringBuilderbuildernewStringBuilder();while((linereader。readLine())!null){builder。append(line);}returnbuilder。toString();}catch(Exceptione){仅仅是重复抛异常未作任何处理throwe;}}
  正例:多余异常正例privatestaticStringfileReader(StringfileName)throwsIOException{try(BufferedReaderreadernewBufferedReader(newFileReader(fileName))){Stringline;StringBuilderbuildernewStringBuilder();while((linereader。readLine())!null){builder。append(line);}returnbuilder。toString();删除多余的抛异常,或增加其他处理:catch(Exceptione){returnfileReaderexception;}}}
  九、字符串转化使用String。valueOf(value)代替value
  把其它对象或类型转化为字符串时,使用String。valueOf(value)比value的效率更高。
  反例:把其它对象或类型转化为字符串反例:intnum520;valueStringstrLovenum;
  正例:把其它对象或类型转化为字符串正例:intnum520;String。valueOf()效率更高StringstrLoveString。valueOf(num);
  十、避免使用BigDecimal(double)
  BigDecimal(double)存在精度损失风险,在精确计算或值比较的场景中可能会导致业务逻辑异常。
  反例:BigDecimal反例BigDecimalbigDecimalnewBigDecimal(0。11D);
  正例:BigDecimal正例BigDecimalbigDecimal1bigDecimal。valueOf(0。11D);
  图1。失去精度
  十一、返回空数组和集合而非null
  若程序运行返回null,需要调用方强制检测null,否则就会抛出空指针异常;返回空数组或空集合,有效地避免了调用方因为未检测null而抛出空指针异常的情况,还可以删除调用方检测null的语句使代码更简洁。
  反例:返回null反例publicstaticResult〔〕getResults(){returnnull;}publicstaticListResultgetResultList(){returnnull;}publicstaticMapString,ResultgetResultMap(){returnnull;}
  正例:返回空数组和空集正例publicstaticResult〔〕getResults(){returnnewResult〔0〕;}publicstaticListResultgetResultList(){returnCollections。emptyList();}publicstaticMapString,ResultgetResultMap(){returnCollections。emptyMap();}
  十二、优先使用常量或确定值调用equals方法
  对象的equals方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals方法。
  反例:调用equals方法反例privatestaticbooleanfileReader(StringfileName)throwsIOException{可能抛空指针异常returnfileName。equals(Charming);}
  正例:调用equals方法正例privatestaticbooleanfileReader(StringfileName)throwsIOException{使用常量或确定有值的对象来调用equals方法returnCharming。equals(fileName);或使用:java。util。Objects。equals()方法returnObjects。equals(Charming,fileName);}
  十三、枚举的属性字段必须是私有且不可变
  枚举通常被当做常量使用,如果枚举中存在公共属性字段或设置字段方法,那么这些枚举常量的属性很容易被修改;理想情况下,枚举中的属性字段是私有的,并在私有构造函数中赋值,没有对应的Setter方法,最好加上final修饰符。
  反例:publicenumSwitchStatus{枚举的属性字段反例DISABLED(0,禁用),ENABLED(1,启用);publicintvalue;privateStringdescription;privateSwitchStatus(intvalue,Stringdescription){this。valuevalue;this。descriptiondescription;}publicStringgetDescription(){returndescription;}publicvoidsetDescription(Stringdescription){this。descriptiondescription;}}
  正例:publicenumSwitchStatus{枚举的属性字段正例DISABLED(0,禁用),ENABLED(1,启用);final修饰privatefinalintvalue;privatefinalStringdescription;privateSwitchStatus(intvalue,Stringdescription){this。valuevalue;this。descriptiondescription;}没有Setter方法publicintgetValue(){returnvalue;}publicStringgetDescription(){returndescription;}}
  十四、tring。split(Stringregex)部分关键字需要转译
  使用字符串String的plit方法时,传入的分隔字符串是正则表达式,则部分关键字(比如。〔〕()等)需要转义。
  反例:String。split(Stringregex)反例String〔〕splita。ab。abc。split(。);System。out。println(Arrays。toString(split));结果为〔〕String〔〕split1aababc。split();System。out。println(Arrays。toString(split1));结果为〔a,,a,b,,a,b,c〕
  正例:String。split(Stringregex)正例。需要转译String〔〕split2a。ab。abc。split(。);System。out。println(Arrays。toString(split2));结果为〔a,ab,abc〕需要转译String〔〕split3aababc。split();System。out。println(Arrays。toString(split3));结果为〔a,ab,abc〕
  图2。String。split(Stringregex)正反例
  有帮助的话分享给你的小伙伴吧
  也许他正需要
  关注我
  你会学到更多!

你认为画画是为了什么?谢谢邀请。作为一个艺术工作者,我深刻地感受到,我画画就是为心中的信念。我自小喜欢涂鸦,后来学习绘画,自认为是当今艺考生的老前辈,骨灰级的最初的艺考生。上了美术专业学校,从……工信部2月末5G移动电话用户较上年末净增2905万户中新经纬3月21日电工信部网站21日发布2022年12月份通信业经济运行情况。12月份,电信业务收入累计完成2586亿元,同比增长9,增速同比提升3。2个百分点。截至2月份末,……贺兰山网评解开被算法绑架的我们3月17日下午,在国务院新闻办公室举行的清朗系列专项行动新闻发布会上,国家网信办副主任盛荣华具体介绍了关于2022年清朗活动包括的10个方面重点任务。其中,将于近期启动的清朗算……美国特斯拉官宣涨价,Model3起售27万元据特斯拉美国官网消息,特斯拉对Model3Y的价格进行上调。其中,Model3标准续航版和高性能版均上调1000美元(约合人民币6445元),现在售价为4。199万美元和5。7……华为手机拍照片怎么加上自己的字和二维码?如何在手机上添加自己的标志。感谢邀请。发现更多精彩功能,请访问玩机技巧应用。这里就以华为手机为例,讲述一下如何在手机拍摄的照片上添加自己的标志来和网络上或其他来源的……升级win11后显示器四周有1mm黑边,怎么解决?这个貌似是液晶屏的封装边吧,应该本来就有的,可能是你一直没有注意,一般的显示器都有这个黑边。如果真的确定之前没有那应该是分辨率没有正确设置对,或者是显卡的驱动没有正确安装好,最……如果微信从下月开始收费,每月10元,你还会用吗?如果微信收费,并且每月十元,我会即刻把它给卸了。从实用价值来说:微信已经不是必须的,唯一东西。而且堆了太多没用的功能,太占内存。考虑是正在使用当中,还是免费,否则是不会选……C组件开发PLC通讯由于本人是一名小电工做起代码可能写的不够完善请各位大佬谅解。本项目主要是通过。NETCore3。1框架进行开发主要用于工业控制方面通过自定义控件继承接口并且实现该接口就可以很好……新电商研究报告发布,北京成新电商独角兽最活跃地新京报讯(记者秦胜南)10月9日,首届中国新电商大会发布《新电商研究报告》,其中提到,当前中国电商独角兽约占据全球半壁江山,汽车、生鲜类电商备受资本青睐,北京成新电商独角兽最活……中概互联真的能抄底吗中概互联今年已经基本腰斩了,市值已经回到3年前水平,并且市盈率也是历史很低,一波波看起来已经接近于底部,看起来是相当诱人,忍不住想抄底一波,但是真的能抄底吗?首先来看,中……马云到底有几个孩子?为什么他的孩子都从来没有露过面?马云有两个孩子,一儿一女,儿子是老大,女儿老二。因为他不想让家人抛头露面,他想保护好家人,这有什么值得质疑的。不要用片面的眼光看一个人,马云还是做了一些为人民服务、为社会进步的……运算符之三比较运算符运算符之三:比较运算符!instanceof结论:1。比较运算符的结果是boolean类型2。区分和classCompareTest{pub……
滚筒洗衣机洗多少次衣服以后,需要清洗一次?洗衣机只知道使用而从来不清洗污垢,容易积垢霉变,使得我们的衣服越洗越脏而且容易导致我们感染皮肤类疾病,所以定期清洁洗衣机就显得非常有必要。根据我的使用经验,不管是滚筒洗衣机还是……除了U盘安装电视家3。0,就没有其他能下载安装方法吗?有:适用于全部电视品牌。用当贝市场搜索电视鲸,安装好后,打开在信息栏用遥控器按左右左左左右电视就会自动安装电视家3。0了。蚂蚁市场可能有吗下载就行了。首先,电视盒子……宫崎骏的所有作品动画作品年表(图)宫崎骏(1941年1月5日mdash;mdash;)是一lambda;知名日本动画导演、动画师及漫画家,目前他住在埼玉县所泽市。宫崎骏毕业于自杉并区立永福小学校、杉并区立大宫中……iqooz5满配和8256的iQOOneo5怎么选呢?文小伊评科技先说结论:除非特别在意续航的可以考虑IQOOZ5;除此之外,价格相差不大的情况下,我都推荐入手IQOONeo5,两款手机不是一个级别的对手。至于12G运存和8……盘点宫崎骏十大动画电影宫崎骏大师的优秀作品盘点宫崎骏十大动画电影:宫崎骏大师的优秀作品宫崎骏十大动画电影:1。千与千寻;2。幽灵公主;3。魔女宅急便;4。天空之城;5。风之谷;6。龙猫;7。红猪;8。哈尔的移动城……2020里番动画精选日本动漫福利10部推荐你知道有什么最新好看的里番动画呢?接下来为大家整理了2020里番动画,为大家推荐好看的动漫,每一部都是精选整理的,喜欢动漫的可以了解下了。12020里番动画精选(10部动漫)……江阴石塘湾公园系个人建造,免费开放,还有断桥,谭纶大司马牌坊难忘的2020年还有十多天就要过去了,3月份时做梦没有想到,今年还能到全国各地到处跑,5月下旬开始从常州出发,沿着山东半岛,渤海湾骑车到秦皇岛,26天骑行3千公里,把沿途知名旅……滕王阁序千古第一骈文三十七个典故视频加载中。。。豫章故郡,洪都新府。星分翼轸,地接衡庐。襟三江而带五湖,控蛮荆而引瓯越。物华天宝,龙光射牛斗之墟;人杰地灵,徐孺下陈蕃之榻。雄州雾列,俊采星驰。台隍枕夷夏……安洁科技买买买之后即将商誉减减减,逆境能否反转?关注理由:成交量上涨股价长期盘整年底商誉减值可能性较大证券简称:安洁科技评级:BBB数据截止日期:2019年9月30日单位:亿元证券代码:002635;成立日……票房最高的10部日本动漫十部票房口碑的日本动漫排行榜票房最高的10部日本动漫:十部票房口碑的日本动漫排行榜动漫电影作为日本最具有代表性的文化作品之一,在全世界都拥有很高的知名度。日本的动漫几乎传遍全世界,作为一种非常经典的……二次元十大动漫美女十大胸器动漫美女简介及图片二次元中十大胸器动漫美女,性感二次元动漫美女图片二次元一直都是很多宅男口中津津乐道的话题,动漫技术,将人物的身材和脸蛋都刻画的惟妙惟肖。下面介绍十大胸器动漫美女简介及图片。……苹果以后也可以在第三方维修了?预计不久后将进入中国市场苹果正在推动更安全,更合规的iPhone维修。除了官方,他们还开始招募独立的第三方维修商,这也可以视为一项重大的售后调整。据国外媒体报道,苹果宣布扩大其独立维修供应商计划……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网