/**
* 笔记:
* 一、HashMap 与 Hashtable 的区别
* 1.相同点:HashMap 和 Hashtable 都是 Java 的集合类,都可以用来存放Java对象。
* 2.区别:
* (1)历史原因
* Hashtable 是基于陈旧的 Dictionary 类的,HashMap 是Java1.2引进的Map接口的一个实现。
* (2)同步性
* Hashtable 是同步的,这个类中的一些方法保证了HashTable中的对象是线程安全的。
* 而HashMap是异步的,因此HashMap的对象不是线程安全的,因为同步的要求会影响执行的效率。
* 所以如果不需要线程安全的集合使用HashMap,可以避免由于同步带来的不必要的性能开销,从而提高效率。
* (3)值
* HashMap可以让你将空值作为一个表的条目的key或value。
* Hashtable不能放入空值。
*
* 二、ArrayList 与 Vector 的区别
* 1.相同点:ArrayList 和 Vector 都是Java的集合类。都可以用来存放Java对象。
* 2.区别:
* (1)同步性
* Vector是同步的,该类中的一些方法保证了Vector中的对象是线程安全的。
* 而ArrayList是异步的,因此ArrayList的对象不是线程安全的,因为同步的要求会影响执行的效率。
* 所以如果不需要线程安全的集合使用ArrayList,可以避免由于同步带来的不必要的性能开销,从而提高效率。
* (2)数据增长
* 从内部实现机制来讲,ArrayList 和 Vector 都是使用数组(Array)来控制集合中的对象,
* 当你向这两种类型中增加元素的时候,如果元素的数目超出了内部数组目前的长度,他们都需要扩展内部数组的长度。
* (重点)Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%。****
* 所以你最后获得的这个集合所占的空间总是比你实际需要的大。如果要在集合中保存大量数据,采用Vector。
* 可以通过设置集合的初始化大小来避免不必要的资源开销。
* 三、应用
* 1.如果要求线程安全:使用Vector 和 Hashtable;
* 2.如果不要求线程安全:使用 ArrayList、LinkedList、HashMap;
* 3.如果要求键值:使用 HashMap、Hashtable;
* 4.如果数据量大,考虑安全线程:使用Vector;
*/
package com.shuiyixin1;
import com.sun.org.apache.xalan.internal.xsltc.runtime.Hashtable;
import java.util.*;
public class learnJ_005jihe3 {
/**
* @作者:shuiyixin
*/
public static void main(String[] args) {// TODO Auto-generated method stub//测试之Hashtable能否放入空值 Hashtable ht = new Hashtable();// ht.put(null, null);//语句错误,不能是空值// System.out.println("测试之Hashtable能否放入空值:" + ht.get(null));测试之Hashtable能否放入空值//注:刚开始报错:HashMap cannot be resolved to a type 是因为没有导入java.util.*包// HashMap hm = new HashMap();// hm.put(null, null);// System.out.println("测试之HashMap能否放入空值:" + hm.get(null));}}