1. Hashtable介绍
和HashMap一样,Hashtable底层也是哈希表数据结构,它存储的内容键值对,是线程安全的,所有方法都有synchronized关键字修饰,效率低,现在使用较少了,因为控制线程安全有其他更好的方案了。Hashtable的key和value不允许为null。
2. Hashtable数据结构
public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, java.io.Serializable {}
Hashtable继承Dictionary类,实现Map接口,也是通过链地址法实现哈希表,与HashMap中相同。
3. Hashtable源码
public Hashtable(int initialCapacity, float loadFactor) { if (initialCapacity < 0) throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity); if (loadFactor <= 0 || Float.isNaN(loadFactor)) throw new IllegalArgumentException("Illegal Load: "+loadFactor); if (initialCapacity==0) initialCapacity = 1; this.loadFactor = loadFactor; table = new Entry<?,?>[initialCapacity]; threshold = (int)Math.min(initialCapacity * loadFactor, MAX_ARRAY_SIZE + 1); } public Hashtable(int initialCapacity) { this(initialCapacity, 0.75f); } public Hashtable() { this(11, 0.75f); } public Hashtable(Map<? extends K, ? extends V> t) { this(Math.max(2*t.size(), 11), 0.75f); putAll(t); }
包含4个构造函数,默认构造函数,初始化容量是11,加载因子0.75;指定容量大小的构造函数;指定容量大小和加载因子的构造函数;包含子Map的构造函数;
Hashtable其他方法源码与HashMap有出入,使用基本与HashMap相同,由于Hashtable是线程安全的,现在已经使用较少了,线程安全有其他更好的方案了,所以就不做过多分析了。
4. Properties使用
Properties也被称为属性类,继承自Hashtable,所以它也是线程安全的,它存储元素时也是以key和value的形式存储,并且key和value只能是String类型,不支持其他类型,所以在解析.properties文件时比较方便。
public static void main(String[] args) { Properties pro = new Properties(); //setProperty存放数据 pro.setProperty("username","abc"); //底层调用put方法 pro.setProperty("password","124"); pro.setProperty("url","www.baidu.com"); //getProperty取数据 String username = pro.getProperty("username"); String password = pro.getProperty("password"); String url = pro.getProperty("url"); System.out.println(username); System.out.println(password); System.out.println(url); }