Java中Hashtable集合及其子类Properties

关于Hashtable集合及其子类Properties:

1、Hashtable的底层是哈希表,也是以键值对的形式存储数据。
其中键值对的key和value都不能为null。

回顾前面学的集合能否存null:
List接口下的ArrayList,LinkedList,Vector都能存null。

Set接口下的HashSet可以存null,TreeSet不能存null。

Map接口下的HashMap可以存<null, null>,Hashtable的key和value都不能为null,

TreeMap的key不能为空,但value可以存null。


2、Hashtable中的方法都用了synchronized关键字修饰,属于线程安全的。

因为是线程安全的,所以在处理线程安全之后,效率较低。

我们处理线程安全有别的方案,故Hashtable使用较少。


3、Hashtable的初始化容量默认为11,默认加载因子是0.75。

当容量达到75%,底层数组自动扩容至(原容量的2倍 + 1)。

参考Hashtable的源代码:其中的rehash()方法有扩容计算表达式。

(1)回顾一下前面学的集合的默认容量及扩容大小:

  • List接口下的ArrayList和Vector底层都是是数组,初始化容量默认为10
    ArrayList满时自动扩容到1.5倍。
    Vector满时自动扩容到2倍。

  • Set接口下的HashSet的底层是HashMap,初始化容量默认为16,默认加载因子是0.75,自动扩容到2倍。

  • Map下的HashMap底层是哈希表,初始化容量默认为16,默认加载因子是0.75,自动扩容到2倍。

  • Map下的Hashtable底层是哈希表,初始化容量默认是11,默认加载因子是0.75自动扩容到(原容量的2倍 + 1)。


4、Hashtable集合效率低,使用少,但其子类Properties会用到。
目前只需要掌握Properties属性类的相关方法就可以。

Properties是一个Map集合,继承Hashtable,也是线程安全的,底层也是一个哈希表。

Properties的key和value都只能是String类型,且都不能为null。当然也是无序不可重复的。

Properties被称为属性类。

测试代码:

import java.util.Properties;

public class Test05 {
    public static void main(String[] args) {
        // 创建一个Properties对象
        Properties pro = new Properties();

        // 目前只需掌握存和取方法,等学了IO再来看其他方法
        // 存数据,只能存<String, String>
        pro.setProperty("userId", "1001");
        pro.setProperty("userName", "张三");
        pro.setProperty("password", "abc123");
        System.out.println(pro.size());  // 3

        // 取数据
        String userId = pro.getProperty("userId");
        String userName = pro.getProperty("userName");
        String password = pro.getProperty("password");
        System.out.println(userId + ", " + userName + ", " + password);

        // 注意,存取的时候字符串千万别写错了,写错了没提示的
    }
}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值