Object
String 与StringBuffer 与StringBuild的区别
String StringBuffer StringBuilder String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量优先的内存空间 StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量 ,默认容量是16;每次扩容为:*2 + 2 int newCapacity = (value.length << 1) + 2;可变类,速度更快 不可变 可变 可变 线程安全 线程不安全 多线程操作字符串 append方法添加synchronize,降低了效率 单线程操作字符串
- String是不可变的,其他可变的
public final class String /** The value is used for character storage. */ // 1.私有的没有提供set方法不能改变;2.final修饰,一旦初始化后也是不能改变; 凡是我们自以为的改变只是引用指向了新的对象 private final char value[]; /** Cache the hash code for the string */ private int hash; // Default to 0
- 非变量字符串之间累加使用String +效率高
String me = "my name" + "is" +"kangkang";
- 一般变量拼接不考虑线程安全优先考虑StringBuild
集合
Arraylist与LinkedList
HashMap(数组+链表+红黑树)
ConcurrentHashMap和Collections.synchronizedMap(会同步整个对象)