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");

            }

        }

    }

}

运行结果

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);

            }

        }

    }

}

 

运行结果

HashTable Dictionary HashMap的更多相关文章

  1. .Net 中HashTable,HashMap 和 Dictionary<key,value> 和List<T>和DataTable的比较

    参考资料 http://www.cnblogs.com/MichaelYin/archive/2011/02/14/1954724.html http://zhidao.baidu.com/link? ...

  2. Hashtable,HashMap,Dictionary的区别

    Hashtable和HashMap的区别:1.Hashtable是基于Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现,c#中无HashMap2.Hashtable ...

  3. HashTable、HashMap、HashSet

    1. HashMap 1)  hashmap的数据结构 Hashmap是一个数组和链表的结合体(在数据结构称“链表散列“),如下图示: 当我们往hashmap中put元素的时候,先根据key的hash ...

  4. Hashtable和HashMap的区别举例

    我们先看2个类的定义 public class Hashtable extends Dictionary implements Map, Cloneable, java.io.Serializable ...

  5. Hashtable和HashMap类的区别

    Hashtable和HashMap类有三个重要的不同之处.第一个不同主要是历史原因.Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现. ...

  6. Hashtable和HashMap类

    Hashtable和HashMap类有三个重要的不同之处. 第一个不同主要是历史原因.Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现 ...

  7. HashTable和HashMap的区别

    1.HashTable线程安全,同步,效率相对低下. HashMap线程不安全,非同步,效率相对高 2.父类:HashTable的父类是Dictionary HashMap是AbstractMap 3 ...

  8. HashTable与HashMap使用总结

    1.HashTable和HashMap比较 1)继承的父类不同. Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类.但二者都实现了Map接口. publi ...

  9. C# Hashtable 使用说明 以及 Hashtable和HashMap的区别

    一,哈希表(Hashtable)简述 在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key/value的键值对,其 ...

随机推荐

  1. mysql init-file参数中语句限制

    mysql 启动选项中的init-file文件的内容目测只能是dml语句,不能包含ddl,否则执行就会报错,但不影响启动本身..太扯了..

  2. C#枚举类型和结构体

    注意:枚举类型和结构体都属于值类型. 结构体:就是一个自定义的集合,里面可以放各种类型的元素,用法大体跟集合一样. 一.定义的方法: struct student { public int nianl ...

  3. [原创]html5游戏_五线谱打音符

    html5手机游戏—五线谱打音符 1.[用五线谱打唱名] 2.[用唱名打五线谱] 3.[无限练习模式] 用来熟悉五线谱上音符的位置 代码不难,这回注释还是有认真写的[只是废代码没有全部删除...] 效 ...

  4. Entity Framework 实体关系总结

    刚开始使用 Entity Framework 的时候,由于没有静下心来认真理清关系,走了一些"痛不欲生"的弯路.而我们目前开发的项目都在使用 Entity Framework,为了 ...

  5. SAP ALV中同一列的不同行显示不同的小数位,并能够总计,小计

    物料数量字段,根据物料类型的不同,来显示不同的小数位:要求有点苛刻: 首先,要能够总计和小计的话,这一列的字段类型必须是数值类型. 这样的话,就不能通过截取的方式改变不同行的小数位. 以下是两种思路: ...

  6. iOS之 PJSIP静态库编译(一)

    首先放上pjsip官方网站http://www.pjsip.org/download.htm 下载的时候注意while the .bz2 has LF line-ends and is for Uni ...

  7. 快捷下载 sourceForge下的资源

    一些开源项目通常会放在  sourceforge.net下面发布.然而,这个网站有时候出现卡顿,并且需要点击几次页面才能下载到自己想要的资源. 这里有个好办法,一步列出所有可下载的资源:        ...

  8. Monyer's Game 6~10关过关方法

    从Monyer's Game开通到现在,已经有50多人通关了.其中绝大部分人,不管是自己独立完成也好,参考别人也罢,都是自己一步一步过去的.像陆羽兄弟甚至已经为游戏做好了整个通关的教程,在此Monye ...

  9. gerrit添加新用户

    默认gerrit的web服务端口为8080,通过apache的反向代理就可以使用标准的80(HTTP)来访问gerrit的web界面,在apache的配置文件httpd.conf添加如下反向代理和HT ...

  10. Android Design Support Library——Floating Action Button

    Floating Action Button是一种悬浮操作的圆形按钮,继承自ImageView,可以通过android:src或者ImageView的任意方法,来设置FloatingActionBut ...