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); }
}

Day11_49_HashTable的更多相关文章

随机推荐

  1. 微信小程序:标签字符串直接变成标签来显示要通过富文本技术

    rich-text标签存在nodes属性直接接受标签字符串

  2. 在vscode中用Git管理项目

    1.新建仓库-->填写仓库名称-->一定要将对钩去掉-->公开-->创建 Git全局设置: git config --global --add user.name " ...

  3. Docker-compose封装mysql并初始化数据以及redis

    一.概述 现有一台服务器,需要部署mysql和redis.其中mysql容器,需要在第一次启动时,执行sql文件. redis保持空数据即可. 关于Docker-compose的安装,请参考连接: h ...

  4. go 在crontab里面运行报错 解决方案

    问题背景 你高高兴兴的写好了一个go脚本,放到你的服务器上,打算定期运行这个脚本,你打开crontab -e, 然后输入: */1 * * * * go run /root/test/main.go ...

  5. API版本管理中的沟通问题

    转: API版本管理中的沟通问题 产品升级会涉及API的更改,当API改动较大时,最大的问题是如何通知API的使用者(内部人员与使用OPENAPI 的用户),我们不能强迫所有用户立即对API的更改做出 ...

  6. JavaScript中的事件循环机制跟函数柯里化

    一.事件循环机制的理解 test();//按秒输出5个5 function test() { for (var i = 0; i < 5; i++) { setTimeout(() => ...

  7. Magicodes.IE Excel合并行数据导入教程

    说明 Magicodes.IE.Excel目前已支持合并行单元格导入,如本篇教程所示. 安装包Magicodes.IE.Excel Install-Package Magicodes.IE.Excel ...

  8. 通达OA 越权访问-2013/2015版本

    漏洞参考 http://wiki.0-sec.org/0day/%E9%80%9A%E8%BE%BEoa/9.html 复现 根据⽹上的通达 OA的源码找这些敏感地址,如: /general/syst ...

  9. 07-Spring ConfigurationClassPostProcessor

    ConfigurationClassPostProcessor 功能 此类是一个后置处理器类,主要功能是参与 BeanFactory 中 BeanDefinition 的操作和 BeanDefinit ...

  10. JVM笔记 -- 来,教你类加载子系统

    类加载子系统 类文件首先需要经过类加载子系统,进行加载,进类信息等加载到运行时数据区,生成Klass的实例. 在类加载子系统中有以下3个阶段操作(广义上的加载): 加载阶段 Bootstrap Cla ...