Java中常见的比较
一、StringBuffer、StringBuilder、String
1) 都是 final 类, 都不允许被继承;
2) String 长度是不可变的, StringBuffer、StringBuilder 长度是可变的;
3) StringBuffer 是线程安全的, StringBuilder 不是线程安全的。
4) 在效率上,StringBuilder比StringBuffer更快
如果字符串不需要改变就使用
String,如果字符串需要改变就使用StringBuffer或者StringBuilder,在StringBuffer和StringBuilder之间做选择时,如果涉及到多线程就使用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: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的区别
四、HashMap、HashTable、ConcurentHashMap
1) HashMap和HashTable都实现了Map接口,ConcurrentHashMap实现了ConcurrentMap接口
2) HashMap 和 ConcurrentHashMap 都继承了AbstractMap类,HashTable继承了Dictionary类
3)HashTable和ConcurrentHashMap是线程安全的,HashMap不是线程安全的。
4) 当一个线程访问HashTable的同步方法时,其他线程访问HashTable的同步方法时,可能会进入阻塞或轮询状态。
5) ConcurrentHashMap使用锁分段技术,将数据分成一段一段的存储,给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问。
如果不涉及到多线程处理的情况,就是用hashMap,因为他的效率比较高。在有并发请求的场景中,如果数据的强一致性比较重要,那么就请使用hashTable,因为ConcurrentHashMap的get,clear,iterator 都是弱一致性的。如果效率要求比较高,那么就使用ConcurrentHashMap,因为他不会像hashTable那样产生阻塞。
摘自:https://www.hollischuang.com/archives/442
Java中常见的比较的更多相关文章
- Java中常见的5种WEB服务器介绍
这篇文章主要介绍了Java中常见的5种WEB服务器介绍,它们分别是Tomcat.Resin.JBoss.WebSphere.WebLogic,需要的朋友可以参考下 Web服务器是运行及发布Web应用的 ...
- Java中常见的Exception种类
Java中常见的Exception种类 1.ClassNotFoundException 2.IOException 3.NoSuchFieldException 4.NoSuchMethodExce ...
- Java基础-JAVA中常见的数据结构介绍
Java基础-JAVA中常见的数据结构介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是数据结构 答:数据结构是指数据存储的组织方式.大致上分为线性表.栈(Stack) ...
- Java中常见的注解
Java中常见的注解 1.JDK自带的注解@Override @Deprecated @Suppvisewarnings 常见第三方注解 Spring:@Autowired @Service ...
- Java中常见的异常类型
一. Java中常见的异常类 异常类 说明 ClassCastException 类型准换异常 ClassNotFoundException 未找到相应类异常 ArithmeticException ...
- Java 中常见的 final 类
Java 中常见的 final 类 java.lang 包 public final class Boolean extends Object implements Serializable, Com ...
- java中常见的六种线程池详解
之前我们介绍了线程池的四种拒绝策略,了解了线程池参数的含义,那么今天我们来聊聊Java 中常见的几种线程池,以及在jdk7 加入的 ForkJoin 新型线程池 首先我们列出Java 中的六种线程池如 ...
- java 中常见异常
1. Java.lang.NullPointerException 这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的 ...
- Java中常见的排序方法
本博主要介绍Java中几种常见的排序算法: /* 排序方法的演示1)插入排序(直接插入排序.希尔排序)2)交换排序(冒泡排序.快速排序)3)选择排序(直接选择排序.堆排序)4)归并排序5)分配排序(基 ...
- Java中常见的锁分类以及对应特点
对于 Java 锁的分类没有严格意义的规则,我们常说的分类一般都是依据锁的特性.锁的设计.锁的状态等进行归纳整理的,所以常见的分类如下: 公平锁和非公平锁:公平锁是多线程按照锁申请的顺序获取锁,非公平 ...
随机推荐
- c/c++ 按照行读取文件
本文代码都在Windows/VC++6.0下测试过, 在linux/g++下也没有问题. 但是请一定注意linux和Windows文件格式的区别,比如: 1. 当linux上的代码读取Windows文 ...
- Oracle基础之Merge into
Merge into语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句. 通过MERGE语句,根据一张表或多表联合查询的连接条件对另外一张表进行查询,连接条件匹配上的进行UPDA ...
- 3.获取git仓库
有两种取得 Git 项目仓库的方法. 第一种是在现有项目或目录下导入所有文件到 Git 中: 第二种是从一个服务器克隆一个现有的 Git 仓库. 在现有目录中初始化仓库 如果你打算使用 Git 来对现 ...
- SAP CRM One order里user status和system status的mapping逻辑
Below example show: How the mapping relationship between User status and System status maintained in ...
- ojdbc14_g.jar与ojdbc14.jar区别
在低级JDK版本1.2与1.3中使用的驱动,class12.jar,虽然实际上在1.4,1.5中使用大部分情况也是OK的 ojdbc14.jar (1,545,954 bytes) - classes ...
- Intellij IDEA 代码提示忽略大小写
1.0 File >>Settings 2.0 Editor >> General >> Code Completion 如下图 选择 None
- Software Architecture
Software Architecture Architecture serves as a blueprint for a system. It provides an abstraction to ...
- 刷题防止Time Limit Exceeded(TLE)技巧
1.C++ 不要使用cin,cout,该使用scanf和printf 2.Java 不要使用Scanner,改用BufferedReader 3.Python 在文件开始的地方加入 import ps ...
- Yii2 配置发送邮件
'components' => [ 'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', 'viewPath' => '@com ...
- Andorid进阶7—— Ant自动编译打包&发布 android项目
http://www.cnblogs.com/tt_mc/p/3891546.html Eclipse用起来虽然方便,但是编译打包android项目还是比较慢,尤其将应用打包发布到各个渠道时,用Ecl ...