新闻中心> 文章详情

南京Java培训:Java中常见亲属比较

2016年04月05日

  常见亲属指的是java中几组有密切关系的几个类,比如linkedlist和arraylist,但很多时候大家在做代码review的时候才发现并没有真正把这些理论知识运用到代码中!有很多时候出于习惯直接就选择了,比如习惯使用stringBuffer而不是stringBuilder,但是这种习惯并不是好习惯。所以,南京Java培训把Java中常见的几对“亲属”拎出来,巩固一下区别,并运用到代码中,把理论运用到实践中。


  这里直介绍主要区别,也就是在我们需要进行选择的时候需要考量的点。其他的区别读者请自行google。(如vector和arraylist在缺省情况下自动增长长度不一样等就不做详细介绍了)


  一、StringBuffer、StringBuilder、String


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


  2) String 长度是不可变的, StringBuffer、StringBuilder 长度是可变的;


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


  4) 在效率上,StringBuilder比StringBuffer更快


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


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


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


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


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


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


  三、Vector、LinkedList、ArrayList


  1) Vector、ArrayList是使用数组实现的,LinkedList是使用链表实现的


  2)Vector是线程安全的,LinkedList、ArrayList不是线程安全的


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


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


  四、HashMap、HashTable、ConcurentHashMap


  1) HashMap和HashTable都实现了Map接口,ConcurrentHashMap实现了ConcurrentMap接口


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


  3)HashTable和ConcurrentHashMap是线程安全的,HashMap不是线程安全的。


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


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


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


  想和兴趣相投的朋友们一起交流吗?那就来江苏万和计算机培训中心吧。而江苏万和作为南京专业的Java培训中心,欢迎广大有志于此行业发展的学员们加入。


上一篇下一篇
按时发顺丰

技术交流群

Java大数据交流群560819979    加入
Python技术交流群595083299    加入
Oracle技术交流群595119011    加入
Web前端技术交流群604697610    加入
Huawei技术交流群482919361    加入
Redhat技术交流群587875348    加入
UI设计技术交流群511649801    加入
Cisco技术交流群596886705    加入
IT运维技术交流群605888381    加入