• Java中常见的比较


    一、StringBuffer、StringBuilder、String

    1) 都是 final 类, 都不允许被继承;

    2) String 长度是不可变的, StringBufferStringBuilder 长度是可变的;

    3) StringBuffer 是线程安全的, StringBuilder 不是线程安全的。

    4) 在效率上,StringBuilderStringBuffer更快

    如果字符串不需要改变就使用String,如果字符串需要改变就使用StringBuffer或者StringBuilder,在StringBufferStringBuilder之间做选择时,如果涉及到多线程就使用StringBuffer,如果不涉及到多线程就使用StringBuilder(因为他更快)。

    二、Integer.valueOf()和new Integer()

    1) new Integer()方法会在内存中新开辟一个内存空间;

    2)valueOf()方法只有在传入的参数小于-128或大于127时,才会去调用一个new Integer()方法去创建一个新的对象,否则会使用静态类IntegerCache中的cache里的对象。

    可以通过启动参数-XX:AutoBoxCacheMax修改掉valueOf()缓存数字最大范围,但最大值也不会超过:Integer.MAX_VALUE +128

    PS:intInteger的主要区别:一个是基本数据类型,一个是对象(不进行初始化的情况下,int的默认值是0,而Integer的初始值是null,Integer是int的包装类)

    三、Vector、LinkedList、ArrayList

    1) VectorArrayList是使用数组实现的,LinkedList是使用链表实现的

    2)Vector是线程安全的,LinkedListArrayList不是线程安全的

    如果涉及到多线程,那么就选择Vector,如果不涉及到多线程就从LinkedListArrayList中选。 LinkedList更适合从中间插入或者删除(链表的特性)。 ArrayList更适合检索和在末尾插入或删除(数组的特性)。

    PS: Collections.synchronizedList(List list)方法也可以用来返回一个线程安全的List。参见SynchronizedList和Vector的区别

    四、HashMap、HashTable、ConcurentHashMap

    1) HashMapHashTable都实现了Map接口,ConcurrentHashMap实现了ConcurrentMap接口

    2) HashMap 和 ConcurrentHashMap 都继承了AbstractMap类,HashTable继承了Dictionary

    3)HashTableConcurrentHashMap是线程安全的,HashMap不是线程安全的。

    4) 当一个线程访问HashTable的同步方法时,其他线程访问HashTable的同步方法时,可能会进入阻塞或轮询状态。

    5) ConcurrentHashMap使用锁分段技术,将数据分成一段一段的存储,给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问。

    如果不涉及到多线程处理的情况,就是用hashMap,因为他的效率比较高。在有并发请求的场景中,如果数据的强一致性比较重要,那么就请使用hashTable,因为ConcurrentHashMap的get,clear,iterator 都是弱一致性的。如果效率要求比较高,那么就使用ConcurrentHashMap,因为他不会像hashTable那样产生阻塞。

    摘自:https://www.hollischuang.com/archives/442

  • 相关阅读:
    jenkins+newman+postman实现api自动化
    数据库的关闭方法
    获取2台linux机器的时间差
    性能测试与其分析
    todo:云数据库的元信息
    todo:trove命令使用
    syslog协议及rsyslog服务全解析
    C++Primer学习日记
    excel-填充
    excel-删除
  • 原文地址:https://www.cnblogs.com/heqiuyong/p/10384281.html
Copyright © 2020-2023  润新知