当前位置: 首页 > 知识库问答 >
问题:

Hashmap和Hashtable在理论上有什么区别?

韦安顺
2023-03-14

hashmap和hashtable在理论上有区别吗?

我不是指Java(或实现)中给出的具体定义,而是理论上的。哈希表不是使用哈希的地图吗...因此是hashmap?

共有3个答案

顾俊茂
2023-03-14

>

  • 同步或线程安全:这是两者之间最重要的区别。HashMap是非同步的,也不是线程安全的。另一方面,HashTable是线程安全和同步的。如果您的应用程序不需要任何多线程任务,则应使用HashMap,换句话说,hashmap更适合非线程应用程序。HashTable应该用于多线程应用程序。

    空键和空值:Hashmap允许一个空键和任意数量的空值,而HashTable不允许HashTable对象中的空键和空值。

    性能:Hashmap比Hashtable更快,占用的内存更少,因为前者是不同步的。与单线程环境中的哈希表等同步对象相比,非同步对象的性能通常要好得多。

    HashMap继承AbstractMap类,而Hashtable继承字典类。

    HashMap和Hashtable之间的显著区别在于,HashMap中的迭代器是一个快速失败的迭代器,而Hashtable的枚举器不是,如果任何其他线程通过添加或删除迭代器自己的remove()方法之外的任何元素来修改映射,则抛出ConcurrentModificationException。但这并不是一个有保证的行为,JVM将尽最大努力完成。这也是Java中枚举和迭代器之间的一个重要区别。

  • 法风畔
    2023-03-14

    哈希映射

    >

  • 两者都属于地图界面。密钥–不能重复
  • 散列映射 未同步,但我们可以将其转换为synchronizedMap。它最多允许一个空键和任意数量的空值
  • 哈希表 同步,因为它是遗留类。它不允许在key/value中使用null
  • Hashtable的默认初始容量为11,HashMap为16。

    散列-不会确保插入顺序

    public static void main(String[] args) {
        new Thread() {
            @Override public void run() {
                HashMap<String, Integer> hm = new HashMap<String, Integer>();
                hm.put("key0", 10); // Compiler Widens.
                hm.put("key1", null);
                hm.put("key0", new Integer(16)); // Overridden.
                hm.put(null, 20);
                hm.put(null, 70);
                hm.put(null, null);
                System.out.println("HashMap : "+hm); // hm.toString()
    
                Iterator<Entry<String, Integer>> it = hm.entrySet().iterator();
                while (it.hasNext()) {                  
                    Map.Entry<String, Integer> pair = (Map.Entry<String, Integer>)it.next();
                    System.out.println(pair.getKey() + " = " + pair.getValue());
                    it.remove(); // avoids a ConcurrentModificationException
                }
                // we can conver HashMap to synchronizedMap
                Collections.synchronizedMap(hm);
    
            }
        }.start();
        new Thread() {
            @Override public void run() {
                Hashtable<String, Integer> ht = new Hashtable<String, Integer>();
                try {
                    ht.put("product1", 12);
                    ht.put("product2", 13);
                    ht.put("product2", 14);
                //  ht.put(null, 20);
                //  ht.put("product2", null);
                    System.out.println("hash Table : "+ht);
    
                } catch (NullPointerException nul) {
                    System.out.println("HashTable will not accept null's eighter in key/value");
                    IllegalArgumentException iae = new IllegalArgumentException("nulls not accept");
                    iae.initCause(nul);
                    throw iae;
                }               
            }
        }.start();
    }
    

  • 邢臻
    2023-03-14

    根据维基百科,它们是一样的:

    在计算中,哈希表(哈希映射)是一种用于实现关联数组(…)的数据结构

    根据维基百科,情况是一样的:

    哈希表或哈希映射是一种将键与值关联起来的数据结构

    关于StackOverflow的一些回答还指出:

    Hashtable通常很有用(它们也被称为hashmaps)(…)

     类似资料:
    • 问题内容: ava中的aHashMap和a有什么区别Hashtable? 对于非线程应用程序,哪个更有效? 问题答案: 和在Java中有一些区别: 是同步的,而HashMap不是。这HashMap对于非线程应用程序更好,因为非同步对象的性能通常优于同步对象。 不允许null键或值。 HashMap允许一个null键和任意数量的null值。 的子类之一是LinkedHashMap,因此,如果您想要可

    • 问题内容: 我了解在HashMap中,条目(键,值)基于hash(Key.hashCode)->表示存储桶位置的索引放置在存储桶中。如果某个条目已经放置在该位置,则会创建一个链表,并将新条目(如果它具有不同的键->通过equals()方法)放置在链表的开头。 我可以将此概念与ConcurrentHashMap的概念进行关联,但不是存储桶,而是各个线程具有锁的段。而不是条目,有HashEntry(i

    • 问题内容: 什么之间的区别,并和我如何与工作中的Java类? 问题答案: 是的抽象基类。两者仍在JDK中,以便与旧代码向后兼容。我们期望使用Java 1.2中引入的接口以及其他实现。

    • HashMap是线程不安全的,HashTable是线程安全的; HashMap中允许键和值为null,HashTable不允许; HashMap的默认容器是16,为2倍扩容,HashTable默认是11,为2倍+1扩容;

    • 本文向大家介绍HashMap 和 Hashtable的区别,包括了HashMap 和 Hashtable的区别的使用技巧和注意事项,需要的朋友参考一下 HashMap和Hashtable的比较是Java面试中的常见问题,用来考验程序员是否能够正确使用集合类以及是否可以随机应变使用多种思路解决问题。HashMap的工作原理、ArrayList与Vector的比较以及这个问题是有关Java 集合框架的

    • 主要内容:1 HashMap和Hashtable的区别1 HashMap和Hashtable的区别 HashMap和Hashtable都以key-value(键值对)形式存储数据。两者都使用哈希技术来存储唯一key。 但是,HashMap和Hashtable类还是有一些区别的。 HashMap Hashtable HashMap是非同步的。意味是线程不安全的。 Hashtable是同步。意味是线程安全的,可以与许多线程共享。 HashMap允许一个n