Map实现类之四:Hashtable 实现类和子类介绍

2020-11-19 0 By admin

Hashtable是个古老的Map 实现类,JDK1.0就提供了。不同于HashMap,Hashtable是线程安全的。
Hashtable实现原理和HashMap相同,功能相同。底层都使用哈希表结构,查询速度快,很多情况下可以互用。

  1. 与HashMap不同,Hashtable不允许使用null 作为key和value
  2. 与HashMap一样,Hashtable也不能保证其中Key-Value 对的顺序

Hashtable判断两个key相等、两个value相等的标准,与HashMap一致。

一、HashMap 和 Hashtable 的比较

  1. HashMap与Hashtable都实现了Map接口。
  2. 由于HashMap的非线程安全性,效率上可能高于Hashtable。
  3. Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。
  4. HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
  5. HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。
  6. Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。
  7. 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();
    }
   }
  }
 }
}