zoukankan      html  css  js  c++  java
  • Java 集合系列09 Hashtable集合

    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);
            
        }    
  • 相关阅读:
    Spring +quartz获取ApplicationContext上下文
    开源 java CMS
    js实现页面跳转的几种方式
    hdu-4089-Activation-概率dp
    linux 内核定时器
    linux 短延时
    linux 基于 jiffy 的超时
    linux 让出处理器
    linux 延后执行
    linux获知当前时间
  • 原文地址:https://www.cnblogs.com/homle/p/14999091.html
Copyright © 2011-2022 走看看