Java中HashMap和HashTable的区别

 HashTable:

HashMap: 

        HashMap和Hashtable将键和值对存储在哈希表中。使用 Hashtable 或 HashMap 时,我们指定一个用作键的对象以及要链接到该键的值。然后对键进行哈希处理,并将生成的哈希码用作表中存储值的索引。现在让我们借助一个例子来讨论一下。

Hashmap 与 Hashtable 

        HashMap 是非同步的。它不是线程安全的,如果没有适当的同步代码,就无法在多个线程之间共享,而 Hashtable 是同步的。它是线程安全的,可以与多个线程共享。
HashMap 允许一个空键和多个空值,而 Hashtable 不允许任何空键或值。
如果不需要线程同步,通常优先选择 HashMap 而不是 HashTable。

Hashmap 和 Hashtable 之间的区别

序号HashmapHashtable
1.没有同步任何方法。每种方法都是同步的。
2.多个线程可以同时操作,因此 hashmap 的对象不是线程安全的。每次只允许一个线程操作 Hashtable 的对象。因此它是线程安全的。
3.线程不需要等待,因此相对性能较高。它增加了线程的等待时间,因此性能较低。
4.键和值都允许为空。键和值都不允许为空。否则,我们将得到空指针异常。
5.它是在 1.2 版本中引入的。它是在 1.0 版本中引入的。
6. 它不是遗留的。这是一种遗产。

现在你一定想知道为什么 HashTable 不允许为空而 HashMap 允许? 

答案很简单。为了成功地从 HashTable 中存储和检索对象,用作键的对象必须实现 hashCode 方法和 equals 方法。由于 null 不是对象,因此它无法实现这些方法。HashMap 是 Hashtable 的高级版本和改进。HashMap 是后来创建的

例子:

// Java program to demonstrate
// HashMap and HashTable
import java.util.*;
import java.lang.*;
import java.io.*;
 
// Name of the class has to be "Main" 
// only if the class is public
class Ideone
{
    public static void main(String args[])
    {
        //----------hashtable -------------------------
        Hashtable<Integer,String> ht=new Hashtable<Integer,String>();
        ht.put(101," ajay");
        ht.put(101,"Vijay");
        ht.put(102,"Ravi");
        ht.put(103,"Rahul");
        System.out.println("-------------Hash table--------------");
        for (Map.Entry m:ht.entrySet()) {
            System.out.println(m.getKey()+" "+m.getValue());
        }
 
        //----------------hashmap--------------------------------
        HashMap<Integer,String> hm=new HashMap<Integer,String>();
        hm.put(100,"Amit");
        hm.put(104,"Amit");  
        hm.put(101,"Vijay");
        hm.put(102,"Rahul");
        System.out.println("-----------Hash map-----------");
        for (Map.Entry m:hm.entrySet()) {
            System.out.println(m.getKey()+" "+m.getValue());
        }
    }
}

输出: 

-------------哈希表-------------- 
103 Rahul 
102 Ravi 
101 Vijay 
-----------哈希映射-- --------- 
100 Amit
101 Vijay
102 Rahul
104 Amit 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1557302.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

基于java SpringBoot和Vue校园求职招聘系统设计

摘要 随着信息技术的迅猛发展&#xff0c;基于Java Spring Boot和Vue的校园求职招聘系统设计成为了解决高校就业难问题的重要手段。本文旨在探讨如何利用Java Spring Boot框架构建后端服务&#xff0c;以及使用Vue.js进行前端开发&#xff0c;从而创建一个高效、易用且功能全面…

掌控板micropython编程实现OLED中bmp图像

掌控板micropython编程实现OLED中bmp图像 1.设置输出格式 打开PCtoLCD2002软件&#xff0c;点击“选项”菜单&#xff0c;设置选项如图1所示。其中&#xff0c;点阵格式&#xff1a;阴码&#xff1b;取模走向&#xff1a;顺向&#xff1b;输出数制&#xff1a;十六进制。设置…

六、索引的数据结构

文章目录 1. 为什么使用索引2. 索引及其优缺点2.1 索引概述2.2 优点2.3 缺点3. InnoDB中索引的推演3.1 索引之前的查找3.1.1 在一个页中的查找3.1.2 在很多页中查找3.2 设计索引3.2.1 一个简单的索引设计方案3.2.2 InnoDB中的索引方案3.3 常见索引概念3.3.1 聚簇索引3.3.2 二级…

【Linux】线程与线程安全知识总结

向外张望的人在做梦&#xff0c; 向内审视的人才是清醒的。 --- 荣格 --- 我最近复习了线程安全这部分知识&#xff0c;将不明白的问题总结出来&#xff0c;并通过AI进行问答帮助我进行学习巩固。本人能力有限 &#xff0c;可能有些内容不准确&#xff0c;望各位大佬海涵&am…

_c++11

嗨喽大家好呀&#xff0c;今天阿鑫给大家带来的是c进阶——c11的内容&#xff0c;好久不见啦&#xff0c;下面让我们进入本节博客的内容吧&#xff01; _c11 统一的列表初始化右值引用可变模板参数(了解&#xff0c;不常接触)lambda表达式function和bind包装器 1. 统一的列表…

气膜体育馆:解决场地困境的新选择—轻空间

北京市近日出台了关于规范和加强新建充气膜体育建筑的指导意见&#xff0c;旨在有效解决区域体育配套不足的问题。这一政策的出台&#xff0c;不仅为全民健身打造了新的载体&#xff0c;也为校园体育设施建设指明了方向。 满足日益增长的健身需求 随着人们健康意识的提升&#…

Skyeye 云智能制造 v3.14.8 发布,ERP 商城 + AI

Skyeye 云智能制造&#xff0c;采用 Springboot winUI 的低代码平台、移动端采用 UNI-APP。包含 30 多个应用模块、50 多种电子流程&#xff0c;CRM、PM、ERP、MES、ADM、EHR、笔记、知识库、项目、门店、商城、财务、多班次考勤、薪资、招聘、云售后、论坛、公告、问卷、报表…

openmmlab使用系列(二):图像超分辨率重构

文章目录 前言一、图像超分辨率重构简介二、mmmagic实现图像超分 前言 超分辨率重构技术&#xff0c;作为计算机视觉领域的一项重要研究课题&#xff0c;近年来受到了广泛关注。随着科技的飞速发展&#xff0c;人们对图像质量的要求越来越高&#xff0c;尤其是在智能手机、监控…

SpringBoot3实战:实现接口签名验证

有时候我们要把自己的服务暴露给第三方去调用&#xff0c;为了防止接口不被授权访问&#xff0c;我们一般采用接口签名的方式去保护接口。 接下来松哥和大家聊一聊这个话题。 一 场景分析 什么时候需要接口签名&#xff1f; 接口签名是一种重要的安全机制&#xff0c;用于确…

JAVA基础: synchronized 和 lock的区别、synchronized锁机制与升级

1 synchronized 和 lock的区别 synchronized是一个关键字&#xff0c; lock是一个接口&#xff0c;实际使用的是实现类 synchronized通过触发的是系统级别的锁机制&#xff0c; lock是API级别的锁机制 synchronized自动获得锁&#xff0c;自动释放锁。 lock需要通过方法获得锁…

[oeasy]python036_数据类型有什么用_type_类型_int_str_查看帮助

回忆上次内容 ord(c)和chr(i) 这是俩函数 这俩函数是一对 相反相成的⚖️ ord 通过 字符 找到对应的 序号chr 通过 序号 找到对应的 字符 为什么ord后面括弧里的参数 一定 要加引号不加不行 而chr后面括弧里的参数 又一定 不加引号加了不行呢&#xff1f;&#x1f914; TypeErr…

强基计划与少儿编程有什么关系?

近年来&#xff0c;编程教育逐渐在基础教育中崭露头角&#xff0c;成为培养孩子逻辑思维、创新能力和解决问题能力的重要手段。而2020年推出的强基计划则是一项面向高考生的特殊招生计划&#xff0c;旨在为基础学科&#xff08;如数学、物理、化学、生物、历史、哲学等&#xf…

MySQL 删除数据库

使用 mysqladmin 删除数据库 使用普通用户登陆MySQL服务器&#xff0c;你可能需要特定的权限来创建或者删除 MySQL 数据库。 所以我们这边使用root用户登录&#xff0c;root用户拥有最高权限&#xff0c;可以使用 MySQL mysqladmin 命令来删除数据库。 在删除数据库过程中&a…

双向数据库迁移工具:轻松实现 MySQL 与 SQLite 数据互导

项目概述与作用 该项目的核心是实现 MySQL 和 SQLite 两种数据库之间的数据迁移工具。它能够轻松地将 MySQL 数据库中的数据导出为 SQLite 数据库文件&#xff0c;反过来也可以将 SQLite 数据库中的数据上传到 MySQL 数据库中。这个双向迁移工具非常适用于&#xff1a; 数据库备…

51c自动驾驶~合集2

我自己的原文哦~ https://blog.51cto.com/whaosoft/11491137 #BEVWorld BEV潜在空间构建多模态世界模型&#xff0c;全面理解自动驾驶~一、引言 世界模型建模了有关环境的知识&#xff0c;其可以通过给定的条件对未来进行合理的想象。未来想象要求世界模型具有物理规律的理解…

利用 OpenAI 和 Python 预测股市行情

作者:老余捞鱼 原创不易,转载请标明出处及原作者。 写在前面的话: 本文介绍了如何利用 OpenAI 和 Python 进行股市情绪预测。主要通过使用 EODHD 提供的股市和金融新闻 API 来提取新闻数据,并利用 LangChain 和 OpenAI 的大型语言模型进行情感分析。 一、综述 …

如何在电脑上启动两个微信实例

前言 有时候&#xff0c;我们需要在电脑端登陆两个微信&#xff0c;来处理不同的事情&#xff0c;之前快速双击微信图标即可打开多个微信&#xff0c;最近发现不是太好使&#xff0c;所以今天介绍一种使用window命令启动两个微信的方法。 步骤 1、找到微信的安装目录&#x…

js逆向--某招标公告公示搜索引擎DES解密

js逆向--某招标公告公示搜索引擎DES解密 一、寻找数据接口二、寻找解密入口三、编写代码一、寻找数据接口 打开网页,在搜索框中输入关键词python。 试图通过按F12或者右键打开开发者工具,发现均没有反应。这时需要点击浏览器右上角的三个点,然后点击更多工具–开发者工具,…

增强分析:新时代的数据洞察工具

随着数据科学和人工智能的迅猛发展&#xff0c;分析数据的方式也发生了显著的变化。增强分析&#xff08;Augmented Analytics&#xff09;是近年来涌现出的新概念&#xff0c;它将人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&#xff09;和自然语言处理&…

华为OD机试 - 实力差距最小总和(Java 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;E卷D卷A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加…