HashTable Dictionary HashMap

简介:



HashTable和HashMap

脑海中一直存在两个Hash,一个是HashMap另一个是HashTable,今天来总结一下两者的区别

相同点:表示根据键的哈希代码进行组织的键/值对的集合。

区别:HashMap在C#中不存在的,而是在Java中

1.C#每一个元素都是存储在DictionaryEntry对象中的键/值对,键不能为 null,但值可以。

2.在Java的HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示HashMap中没有该键,也可以表示该键所对应的值为null。

因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键,而应该用containsKey()方法来判断

HashTable示例

using System;
using System.Collections;
 
namespace MyCollection
{
    public class HashTableExample
    {
        public static void Main()
        {
            // Create a new hash table.
            Hashtable openWith = new Hashtable();
 
            // key没有重复, 但是value有重复.
            openWith.Add("txt", "notepad.exe");
            openWith.Add("bmp", "paint.exe");
            openWith.Add("dib", "paint.exe");
            openWith.Add("rtf", "wordpad.exe");
 
            //如果key重复,进行catch处理
            try
            {
                openWith.Add("txt", "winword.exe");
            }
            catch
            {
                Console.WriteLine("An element with Key = \"txt\" already exists.");
            }
 
            // 通过key获取value
            Console.WriteLine("For key = \"rtf\", value = {0}.", openWith["rtf"]);
 
            //替换value
            openWith["rtf"] = "winword.exe";
            Console.WriteLine("For key = \"rtf\", value = {0}.", openWith["rtf"]);
 
            //遍历HashTable
            foreach (DictionaryEntry de in openWith)
            {
                Console.WriteLine(de.Key);
            }
 
            //获取Keys
            ICollection keCollection = openWith.Keys;
            foreach (string s in keCollection)
            {
                Console.WriteLine("key = {0}",s);
            }
 
            //删除指定的key
            openWith.Remove("doc");
            if (!openWith.Contains("doc"))
            {
                Console.WriteLine("Key\"doc\" is not found");
            }
        }
    }
}

运行结果

image

HashTable和Dictionary

示例代码

using System;
using System.Collections;
using System.Collections.Generic;
 
 
namespace MyCollection
{
    class HashTableDictionary
    {
        static void Main(string[] args)
        {
            Hashtable hashtable = new Hashtable();
            hashtable.Add("8","Name8");
            hashtable.Add("2", "Name5");
            hashtable.Add("5", "Name2");
            hashtable.Add("1", "Name1");
            foreach (var hash in hashtable.Keys)
            {
                Console.WriteLine(hash.ToString());
            }
            Console.WriteLine();
 
            Dictionary<int,string> dict = new Dictionary<int, string>();
            dict.Add(8, "Name8");
            dict.Add(2, "Name5");
            dict.Add(5, "Name2");
            dict.Add(1, "Name1");
            foreach (var _dict1 in dict.Keys)
            {
                Console.WriteLine(_dict1);
            }
 
            Console.WriteLine();
            Dictionary<string, string> dict2 = new Dictionary<string, string>();
            dict2.Add("8", "Name8");
            dict2.Add("2", "Name5");
            dict2.Add("5", "Name2");
            dict2.Add("1", "Name1");
            foreach (var _dict2 in dict2.Keys)
            {
                Console.WriteLine(_dict2);
            }
        }
    }
}
 

运行结果

image


本文转自赵青青博客园博客,原文链接:http://www.cnblogs.com/zhaoqingqing/p/3951031.html,如需转载请自行联系原作者

相关文章
|
7月前
|
存储 缓存 安全
面试题-HashMap底层原理与HashTable的区别
字节跳动面试题-HashMap底层原理与HashTable的区别
71 0
|
7月前
|
存储 安全 算法
详解Java中HashMap、HashTable、ConcurrentHashMap常见问题
详解Java中HashMap、HashTable、ConcurrentHashMap常见问题
70 0
|
1月前
|
安全
HashTable与HashMap的区别
(1)HashTable的每个方法都用synchronized修饰,因此是线程安全的,但同时读写效率很低 (2)HashTable的Key不允许为null (3)HashTable只对key进行一次hash,HashMap进行了两次Hash (4)HashTable底层使用的数组加链表HashTable与HashMap的区别
23 2
|
2月前
|
存储 开发者
HashMap和Hashtable的key和value可以为null吗,ConcurrentHashMap呢
HashMap的key可以为null,value也可以为null;Hashtable的key不允许为null,value也不能为null;ConcurrentHashMap的key不允许为null
|
4月前
|
存储 安全 Java
一天十道Java面试题----第二天(HashMap和hashTable的区别--------》sleep、wait、join)
这篇文章是关于Java面试的第二天笔记,涵盖了HashMap与HashTable的区别、ConcurrentHashMap的实现原理、IOC容器的实现方法、字节码的概念和作用、Java类加载器的类型、双亲委派模型、Java异常体系、GC如何判断对象可回收、线程的生命周期及状态,以及sleep、wait、join、yield的区别等十道面试题。
一天十道Java面试题----第二天(HashMap和hashTable的区别--------》sleep、wait、join)
|
4月前
|
安全 Java
【Java集合类面试十五】、说一说HashMap和HashTable的区别
HashMap和Hashtable的主要区别在于Hashtable是线程安全的,不允许null键和值,而HashMap是非线程安全的,允许null键和值。
|
4月前
|
存储 安全 Java
Hashtable 和 HashMap 的区别
【8月更文挑战第22天】
169 0
|
6月前
|
安全 存储 Java
HashMap和Hashtable区别是什么?
HashMap和Hashtable区别是什么?
45 4
|
7月前
|
存储 安全 Java
Java容器类List、ArrayList、Vector及map、HashTable、HashMap
Java容器类List、ArrayList、Vector及map、HashTable、HashMap
53 0
|
7月前
|
存储 并行计算 安全
【Java编程进阶之路 01】深入探索:HashMap、ConcurrentHashMap与HashTable的演进之路
HashMap、ConcurrentHashMap与HashTable均为Java中的哈希表实现。HashMap非线程安全但性能高,适用于单线程;HashTable线程安全但性能较低,已少用;ConcurrentHashMap线程安全且高性能,是并发环境下的首选。三者在线程安全性与性能间各有侧重。
75 1