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. Java基础语法:abstract修饰符

    一.简介 描述: 'abstract'修饰符可以用来修饰方法,也可以修饰类. 如果修饰方法,那么该方法就是抽象方法:如果修饰类,那么该类就是抽象类. 抽象类和抽象方法起到一个框架作用,方便后期扩展的重 ...

  2. WPF -- 构建动画

    写在前面:本文代码摘自<Head First C#> 本文使用ObjectAnimationUsingKeyFrames + Storyboard构建一个动画. ObjectAnimati ...

  3. go http库 设置代理

    func ProxyTest() { proxyAddr := "http://your IP:8080/" httpUrl := "http://your target ...

  4. 使用ASP.NET Blazor Server 写混合桌面程序的疯狂想法

    开发本地桌面程序,使用进程内浏览器+进程内BLAZOR服务器,然后任性写功能,自由分发,放飞自我,大家看怎么样? 求评估,求批评 https://github.com/congzhangzh/desk ...

  5. POJ-1751(kruskal算法)

    Highways POJ-1751 注意这里的样例答案也是对的,只是输出顺序改变,但是这也没关系,因为题目加了特殊判断. #include<iostream> #include<cs ...

  6. [个人总结]利用grad-cam实现人民币分类

    # -*- coding:utf-8 -*- import os import numpy as np import torch import cv2 import torch.nn as nn fr ...

  7. SpringMVC-03 RestFul和控制器

    SpringMVC-03 RestFul和控制器 控制器Controller 控制器复杂提供访问应用程序的行为,通常通过接口定义或注解定义两种方法实现. 控制器负责解析用户的请求并将其转换为一个模型. ...

  8. spring-cloud-alibaba之Nacos

    在微服务构架中,集群服务间的需要调用时就需要知道各个服务的IP和提供服务的端口等信息,如果每个部署一个服务就配置一次,那么必然时非常麻烦的,因此我们需要一个能够统一管理的东西来解决这个问题,由此诞生了 ...

  9. Docker 三剑客 到 k8s 介绍

    一.Docker 三剑客 Docker-Compose Docker-Compose 是用来管理你的容器的,有点像一个容器的管家,想象一下当你的Docker中有成百上千的容器需要启动,如果一个一个的启 ...

  10. 解决新版谷歌浏览器在http请求下无法开启麦克风问题

    1.在浏览器地址栏中输入"chrome://flags/#unsafely-treat-insecure-origin-as-secure", 2.将该选项置为Enabled, 3 ...