0、目錄
1、 HashMap和Hashtable的區別
HashMap和Hashtable都實現了Map接口,都是鍵值對保存數據的方式
-
區別1:
HashMap可以存放 null
Hashtable不能存放null -
區別2:
HashMap不是線程安全的類
Hashtable是線程安全的類
2、StringBuffer和StringBuilder的區別
StringBuffer 是線程安全的
StringBuilder 是非線程安全的
所以當進行大量字符串拼接操作的時候,如果是單線程就用StringBuilder會更快些,如果是多線程,就需要用StringBuffer 保證數據的安全性
非線程安全的爲什麼會比線程安全的 快? 因爲不需要同步嘛,省略了些時間
3、ArrayList和Vector的區別
通過在eclipse中查看源代碼可以得知:
ArrayList類的聲明:
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
Vector類的聲明:
public class Vector<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
一模一樣的~
他們的區別也在於,Vector是線程安全的類,而ArrayList是非線程安全的。
4、把非線程安全的集合轉換爲線程安全
ArrayList是非線程安全的,換句話說,多個線程可以同時進入一個ArrayList對象的add方法
藉助Collections.synchronizedList,可以把ArrayList轉換爲線程安全的List。
與此類似的,還有HashSet,LinkedList,HashMap等等非線程安全的類,都通過工具類Collections轉換爲線程安全的
package multiplethread;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class TestThread {
public static void main(String[] args) {
List<Integer> list1 = new ArrayList<>();
List<Integer> list2 = Collections.synchronizedList(list1);
}
}