Java 中的 HashMap 和 Hashtable 有什么区别?

Java 中的 HashMap 和 Hashtable 有什么区别?



  1. Hashtable是同步的,反之则HashMap不是。这HashMap对于非线程应用程序来说更好,因为非同步对象通常比同步对象执行得更好。

  2. Hashtable不允许null键或值。 HashMap允许一个null键和任意数量的null值。

  3. HashMap 的子类之一是LinkedHashMap,因此如果您想要可预测的迭代顺序(默认情况下是插入顺序),您可以轻松地将HashMap换成LinkedHashMap。如果您使用Hashtable.

由于同步对您来说不是问题,因此我建议HashMap. 如果同步成为问题,您还可以查看ConcurrentHashMap.

public class SOP {    public static void print(String s) {
        System.out.println(s+"\n");
    }}public class TestThread extends Thread {
    String name;
    TheDemo theDemo;
    public TestThread(String name,TheDemo theDemo) {        this.theDemo = theDemo;        this.name = name;
        start();
    }
    @Override
    public void run() {
        theDemo.test(name);
    }}public class TheDemo {    public synchronized void test(String name) {        for(int i=0;i<10;i++) {
            SOP.print(name + " :: "+i);            try{
                Thread.sleep(500);
            } catch (Exception e) {
                SOP.print(e.getMessage());
            }
        }
    }
    public static void main(String[] args) {        TheDemo theDemo = new TheDemo();        new TestThread("THREAD 1",theDemo);        new TestThread("THREAD 2",theDemo);        new TestThread("THREAD 3",theDemo);
    }}

注意:synchronized只要前一个线程的执行未完成,就会阻止下一个线程对 test() 方法的调用。线程一次只能访问此方法。无需synchronized所有线程都可以同时访问此方法。

当线程调用对象的同步方法“test”时(这里对象是“TheDemo”类的实例),它会获取该对象的锁,任何新线程都不能调用同一对象的任何同步方法,只要前一个线程获得锁的对象不会释放锁。

当调用类的任何静态同步方法时,都会发生类似的情况。线程获取与该类关联的锁(在这种情况下,该类实例的任何非静态同步方法都可以由任何线程调用,因为该对象级锁仍然可用)。只要当前持有锁的线程未释放类级别锁,任何其他线程都将无法调用该类的任何静态同步方法。

同步输出

THREAD 1 :: 0
THREAD 1 :: 1
THREAD 1 :: 2
THREAD 1 :: 3
THREAD 1 :: 4
THREAD 1 :: 5
THREAD 1 :: 6
THREAD 1 :: 7
THREAD 1 :: 8
THREAD 1 :: 9
THREAD 3 :: 0
THREAD 3 :: 1
THREAD 3 :: 2
THREAD 3 :: 3
THREAD 3 :: 4
THREAD 3 :: 5
THREAD 3 :: 6
THREAD 3 :: 7
THREAD 3 :: 8
THREAD 3 :: 9
THREAD 2 :: 0
THREAD 2 :: 1
THREAD 2 :: 2
THREAD 2 :: 3
THREAD 2 :: 4
THREAD 2 :: 5
THREAD 2 :: 6
THREAD 2 :: 7
THREAD 2 :: 8
THREAD 2 :: 9

无同步输出

THREAD 1 :: 0
THREAD 2 :: 0
THREAD 3 :: 0
THREAD 1 :: 1
THREAD 2 :: 1
THREAD 3 :: 1
THREAD 1 :: 2
THREAD 2 :: 2
THREAD 3 :: 2
THREAD 1 :: 3
THREAD 2 :: 3
THREAD 3 :: 3
THREAD 1 :: 4
THREAD 2 :: 4
THREAD 3 :: 4
THREAD 1 :: 5
THREAD 2 :: 5
THREAD 3 :: 5
THREAD 1 :: 6
THREAD 2 :: 6
THREAD 3 :: 6
THREAD 1 :: 7
THREAD 2 :: 7
THREAD 3 :: 7
THREAD 1 :: 8
THREAD 2 :: 8
THREAD 3 :: 8
THREAD 1 :: 9
THREAD 2 :: 9
THREAD 3 :: 9


文章来源地址https://www.toymoban.com/diary/share/277.html

到此这篇关于Java 中的 HashMap 和 Hashtable 有什么区别?的文章就介绍到这了,更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

原文地址:https://www.toymoban.com/diary/share/277.html

如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用
上一篇 2023年08月19日 16:46
下一篇 2023年08月19日 16:46

相关文章

  • HashMap和HashTable的区别是什么?

    HashMap和HashTable都是常见的哈希表实现,用于存储键值对。它们在功能上类似,但在以下几个方面存在区别: 线程安全性:HashTable是线程安全的,它的所有操作都是同步的,即多线程同时访问HashTable时会自动进行同步处理,从而保证线程安全。而HashMap是非线程安全的,它的操

    2024年02月15日
    浏览(37)
  • 【Java】HashMap、HashTable和ConcurrentHashMap的区别

    HashTable、HashMap和ConcurrentHashMap之间的区别主要体现在线程安全、继承关系与实现接口、对null值的处理、性能以及数据结构等几个方面。以下是对这三者之间区别的详细分析: 项目 HashMap HashTable ConcurrentHashMap null键 允许(仅能有一个) 不允许 允许(仅能有一个) null值 允许

    2024年04月25日
    浏览(56)
  • HashTable, HashMap, ConcurrentHashMap 之间的区别

    哈希表的组织形式是这样的: 对于哈希表这种重要而又频繁被使用的数据结构,是否线程安全往往是人们经常考虑的方向之一。 HashTable是线程安全的。但是它的线程安全在于它的关键方法都使用了synchronized,比如get方法、put方法,这就会导致它的 并发程度低下 。它就是相当

    2024年02月11日
    浏览(43)
  • HashMap、HashTable、ConcurrentHashMap 之间的区别

    哈喽,大家好~我是保护小周ღ,本期为大家带来的是 HashMap、HashTable、ConcurrentHashMap 之间的区别,从数据结构到多线程安全~确定不来看看嘛~ 更多精彩敬请期待:保护小周ღ *★,°*:.☆( ̄▽ ̄)/$:*.°★* ‘ HashTable 和 HashMap都是用于存储键值对的数据结构 我们一般把搜索的数据

    2023年04月18日
    浏览(34)
  • 【JAVA】concurrentHashMap和HashTable有什么区别

    🍎 个人博客: 个人主页 🏆 个人专栏: JAVA ⛳️   功不唐捐,玉汝于成 目录 前言 正文 同步性质: 性能: 允许空键值(Allow Nulls): 迭代器(Iterator): 继承关系: 结语  我的其他博客 在Java的集合框架中, ConcurrentHashMap 和 HashTable 都提供了线程安全的哈希表实现,用

    2024年01月16日
    浏览(51)
  • JavaEE 初阶篇-线程安全的集合类、多线程环境使用 ArrayList、队列、哈希表(HashMap 、ConCurrentHashMap 、HashTable 的区别)

    🔥博客主页: 【 小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍   文章目录         1.0 线程安全的集合类         1.2 线程安全的集合类 - Vector         1.3 线程安全的集合类 - Stack         1.4 线程安全的集合类 - HashTable         2.0 多线程环境使用 ArrayList        

    2024年04月25日
    浏览(49)
  • C#中的HashTable和Dictionary之间的区别

    HashTable和Dictionary都是用于存储数据的数据结构的类型。这两个数据结构都将存储的数据保存为键值对。

    2024年02月17日
    浏览(50)
  • 第7章-第7节-Java中的TreeMap和HashTable以及collections工具类

    1、TreeMap: 1)、 概述 TreeMap 是一个有序的key-value集合,它是通过红黑树实现的 2)、 特点 键值对映射关系 一个键对应一个值 键不能重复,值可以重复 键允许为空值 元素有序(具体的排序规则有Comparable 或者 Comparator决定) 3)、 使用  2、HashTable: 1)、 概述 HashTable与Hash

    2024年01月23日
    浏览(50)
  • Java 中的访问修饰符有什么区别?

    Java 中的访问修饰符用于控制类、类的成员变量和方法的访问权限,主要有以下四种: public:公共访问修饰符,可以被任何类访问。public 修饰的类、成员变量和方法可以在任何地方被访问到。 protected:受保护的访问修饰符,可以被类本身、子类和同一个包中的其他类访问。

    2024年02月04日
    浏览(34)
  • Java----Hashmap,LinkedMap和TreeMap三者的区别

            其中map表示的意思为“映射”,HashMap,LinkedMap和TreeMap这三中类都是对Map接口的实现类,在数据插入方面,HashMap是无序插入,LinkedMap是有序插入,而TreeMap会根据键的值进行排序后再进行插入。在运行方面,前两个的运行速度较快,针对Map对象的存储会选择前两者,

    2024年02月13日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包