码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Java编程常见问题汇总六


    系列文章目录


    文章目录

    • 系列文章目录
    • 前言
    • 一、反射使用不当
    • 二、不必要的同步
    • 三、错误的选择List类型
    • 四、HashMap size陷阱
    • 五、对Hashtable, HashMap 和 HashSet了解不够


    前言

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。
    在这里插入图片描述


    一、反射使用不当

    错误的写法:

    Class beanClass = ...   
    if (beanClass.newInstance() instanceof TestBean) ...
    

    这里的本意是检查beanClass是否是TestBean或是其子类, 但是创建一个类实例可能没那么简单, 首先实例化一个对象会带来一定的消耗, 另外有可能类没有定义默认构造函数. 正确的做法是用Class.isAssignableFrom(Class) 方法。

    正确的写法:

    Class beanClass = …
    if (TestBean.class.isAssignableFrom(beanClass)) …

    二、不必要的同步

    错误的写法:

    Collection l = new Vector();   
    for (...) {   
    l.add(object);   
    }
    

    Vector是ArrayList同步版本。

    正确的写法:

    Collection l = new ArrayList();   
    for (...) {   
    l.add(object);   
    }
    

    三、错误的选择List类型

    根据下面的表格数据来进行选择

    在这里插入图片描述

    四、HashMap size陷阱

    错误的写法:

    Map map = new HashMap(collection.size());  
    for (Object o : collection) {  
      map.put(o.key, o.value);  
    }
    

    这里可以参考guava的Maps.newHashMapWithExpectedSize的实现. 用户的本意是希望给HashMap设置初始值, 避免扩容(resize)的开销. 但是没有考虑当添加的元素数量达到HashMap容量的75%时将出现resize。

    正确的写法:

    Map map = new HashMap(1 + (int) (collection.size() / 0.75));
    

    五、对Hashtable, HashMap 和 HashSet了解不够

    这里主要需要了解HashMap和Hashtable的内部实现上, 它们都使用Entry包装来封装key/value, Entry内部除了要保存Key/Value的引用, 还需要保存hash桶中next Entry的应用, 因此对内存会有不小的开销, 而HashSet内部实现其实就是一个HashMap. 有时候IdentityHashMap可以作为一个不错的替代方案. 它在内存使用上更有效(没有用Entry封装, 内部采用Object[]). 不过需要小心使用. 它的实现违背了Map接口的定义. 有时候也可以用ArrayList来替换HashSet.

    这一切的根源都是由于JDK内部没有提供一套高效的Map和Set实现。

  • 相关阅读:
    Ceph块存储
    《计算机网络微课堂》2-5 信道的极限容量
    nginx负载均衡
    杰理之内置关机电流 1.2uA,之后不能长按开机【篇】
    【面向对象的三大基本特征与五大基本原则】
    【webrtc】时间戳reordered 重新排序、环绕的判断
    mysql 递归获取内容
    麒麟OS V10 设置开机自启动
    itext生成pdf
    Apache Shiro 集成-spring
  • 原文地址:https://blog.csdn.net/pleaseprintf/article/details/139426600
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号