Java中各类集合(字符串类)的线程安全性!!!数组
1、概念:安全
2、线程安全(Thread-safe)的集合对象:多线程
3、非线程安全的集合对象:jvm
4、相关集合对象比较:ide
Vector和ArrayList在使用上很是类似,均可以用来表示一组数量可变的对象应用的集合,而且能够随机的访问其中的元素。性能
HashTable、HashMap、HashSet:
HashTable和HashMap采用的存储机制是同样的,不一样的是:
一、HashMap:
a. 采用数组方式存储key-value构成的Entry对象,无容量限制;
b. 基于key hash查找Entry对象存放到数组的位置,对于hash冲突采用链表的方式去解决;
c. 在插入元素时,可能会扩大数组的容量,在扩大容量时需要从新计算hash,并复制对象到新的数组中;
d. 是非线程安全的;
e. 遍历使用的是Iterator迭代器;ui
二、HashTable:
a. 是线程安全的;
b. 不管是key仍是value都不容许有null值的存在;在HashTable中调用Put方法时,若是key为null,直接抛出NullPointerException异常;
c. 遍历使用的是Enumeration列举;spa
三、HashSet:
a. 基于HashMap实现,无容量限制;
b. 是非线程安全的;
c. 不保证数据的有序;线程
TreeSet、TreeMap:
TreeSet和TreeMap都是彻底基于Map来实现的,而且都不支持get(index)来获取指定位置的元素,须要遍从来获取。另外,TreeSet还提供了一些排序方面的支持,例如传入Comparator实现、descendingSet以及descendingIterator等。
一、TreeSet:
a. 基于TreeMap实现的,支持排序;
b. 是非线程安全的;对象
二、TreeMap:
a. 典型的基于红黑树的Map实现,所以它要求必定要有key比较的方法,要么传入Comparator比较器实现,要么key对象实现Comparator接口;
b. 是非线程安全的;
StringBuffer和StringBulider:
StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串。
一、在执行速度方面的比较:StringBuilder > StringBuffer ;
二、他们都是字符串变量,是可改变的对象,每当咱们用它们对字符串作操做时,其实是在一个对象上操做的,不像String同样建立一些对象进行操做,因此速度快;
三、 StringBuilder:线程非安全的;
四、StringBuffer:线程安全的;
对于String、StringBuffer和StringBulider三者使用的总结:
1.若是要操做少许的数据用 = String
2.单线程操做字符串缓冲区 下操做大量数据 = StringBuilder
3.多线程操做字符串缓冲区 下操做大量数据 = StringBuffer