Map实现类之四:Hashtable 实现类和子类介绍
Hashtable是个古老的Map 实现类,JDK1.0就提供了。不同于HashMap,Hashtable是线程安全的。
Hashtable实现原理和HashMap相同,功能相同。底层都使用哈希表结构,查询速度快,很多情况下可以互用。
- 与HashMap不同,Hashtable不允许使用null 作为key和value
- 与HashMap一样,Hashtable也不能保证其中Key-Value 对的顺序
Hashtable判断两个key相等、两个value相等的标准,与HashMap一致。
一、HashMap 和 Hashtable 的比较
- HashMap与Hashtable都实现了Map接口。
- 由于HashMap的非线程安全性,效率上可能高于Hashtable。
- Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。
- HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
- HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。
- Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。
- Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。
二、Properties 处理属性文件
Properties 类是Hashtable的子类,该对象用于处理属性文件。
由于属性文件里的key、value都是字符串类型,所以【Properties 里的key和value都是字符串类型】
存取数据时,建议使用 setProperty(String key,Stringvalue)
方法和 getProperty(String key)
方法。
2.1、新建jdbc.properties文件
name=hello
password=world
2.2、编写源代码
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
public class PropertiesTest {
//Properties:常用来处理配置文件。key和value都是String类型
public static void main(String[] args){
//快捷键:ALT+Shift+Z
FileInputStream fis = null;
try {
Properties pros = new Properties();
fis = new FileInputStream("jdbc.properties");
pros.load(fis); //加载流对应文件
String name = pros.getProperty("name");
String password = pros.getProperty("password");
System.out.println("name = " + name + ",password = " + password);
} catch (IOException e) {
e.printStackTrace();
} finally {
if(fis != null){
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}