Day11_49_HashTable

HashTable

   * HashTable是较早期的使用Hash算法的一种容器结构,现在基本已被淘汰,单线程多使用HashMap,多线程使用ConcurrentHashMap。

   * HashTable继承体系
       
          - HashTable<K,V>也是一种key-value结构,它继承自Dictionary<K,V>,实现了Map<K,V>和Cloneable以及Serializable接口。

          - HashTable的操作几乎和HashMap一致,主要的区别在于HashTable为了实现多线程安全,在几乎所有的方法上都加上了synchronized锁,而加锁的结果就是HashTable操作的效率十分低下。

   * HashTable与HashMap对比
        
        (1)线程安全:  HashMap是线程不安全的类,多线程下会造成并发冲突,但单线程下运行效率较高;HashTable是线程安全的类,很多方法都是用synchronized修饰,但同时因为加锁导致并发效率低下,单线程环境效率也十分低;

        (2)插入null: HashMap允许有一个键为null,允许多个值为null;但HashTable不允许键或值为null;

        (3)容量:     HashMap底层数组长度必须为2的幂,这样做是为了hash准备,默认为16;而HashTable底层数组长度可以为任意值,这就造成了hash算法散射不均匀,容易造成hash冲突,默认为11;

        (4)Hash映射 :HashMap的hash算法通过非常规设计,将底层table长度设计为2的幂,使用位与运算代替取模运算,减少运算消耗;而HashTable的hash算法首先使得hash值小于整型数最大值,再通过取模进行散射运算;


   * java.util.Properties   

        -  是HashTable下的实现类,也是一种key-value结构。
        
        -  Xxx.properties 为Java 语言常见的配置文件,如数据库的配置 jdbc.properties, 系统参数配置 system.properties。

        -  Properties集合中的<key,value>必须都是字符串

        -  Properties集合也是无序不可重复的和HashMap一样有重复数据存入的话会覆盖旧数据


   * Properties 下的常用方法
             
      ```
      import java.util.Hashtable;
      import java.util.Properties;

      public class PropertiesTest01 {
          public static void main(String[] args) {

              //1.创建Properties集合(属性类对象)  Properties集合中的<key,value>必须都是字符串,Properties集合也是无序不可重复的和HashMap一样有重复数据存入回覆盖旧数据
                  Properties properties=new Properties(); //夫类引用指向子类对象


              //2.setProperty(String key,String value)    向集合中存入数据
              properties.setProperty("18632418755","施歌");
              properties.setProperty("13439523164","张三");
              properties.setProperty("15631645112","李四");


              //3.getProperty(String key)  通过key获取Value
               String value=properties.getProperty("18632418755");
               System.out.println(value);

              
          }
      }
上一篇:网络篇 OSPF的被动接口-49


下一篇:省选模拟49