HashTable键值对集合 及它与Dictionary的区别

<1>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace HashTable键值对集合
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建了一个键值对集合对象
            Hashtable ht = new Hashtable();

            //-------------------------------Add() 添加


            //Add(object key, object value) ;根据里氏转换定律,当一个地方需要一个父类对象,你可以给它一个子类对象。因为object是所有类的父类,所以你可以给它任何类型的数据

            ht.Add(1, "张三");
            ht.Add(2, "李四");
            ht.Add(3, "王五");
            ht.Add(false, "假");
            ht.Add("数组", new int[] { 5, 6, 7 });

            ht[4] = "新来的"; //除了Add()方法外,这也是一种添加数据的方式;在ht集合中创建key为4值为“新来的”的键值对

            //ht.Add(1, "赵六");//运行会报错:因为键是唯一的,ht里已经有一个key为1的键值对了。如果再添加就报错了。但是以下方法却可以
            ht[1] = "赵六"; // 这里.net内部其实做了一个判断:如果ht里存在key为1的键值对,那么就将key为1的值替换为“赵六”。如果不存在key为1的键值对,那么就创建key为1值为赵六的键值对。

            //在键值对集合中是根据“键”去找“值”的




            //-------------------------------Clear()清空所有元素;

            ht.Clear();



            //-------------------------------Remove()移除指定元素

            ht.Remove(1);//移除key为1的键值对



            //-------------------------------Contains()包含

            //Contains()与ContainsKey()是一样的

            bool b = ht.Contains(1);// 检查ht键值对集合里是否有包含key为1的键值对
            bool c = ht.ContainsKey(1);//检查ht键值对集合里是否有包含key为1的键值对。

            // 如果 System.Collections.Hashtable 包含带有指定的 value 的元素,则为 true;否则为 false。
            bool d = ht.ContainsValue("王五"); //即检查ht集合中是否包含值为“王五”的键值对。




            //---------------------------------------------

	        //特别要注意:Hashtable的键不能用for循环来遍历,因为Hashtable的键可以是object类型的,例如 
			Hashtable hs = new Hashtable();
            hs.Add(1, "张三");
            hs.Add(false, "李四");
            for (int i = 0; i < hs.Count; i++)
            {

                //因为hs总共有2项。所以i的值从0开始 到1为止。而hs这个键值对里没有以0为key的值,所以这里首先输出了一个空,然后i=1的时候 hs[1] 这个时候hs这个键值对里有一个以1为key的值,所以输出了“张三”
                Console.WriteLine(hs[i]);                
            }
			
			//哈希键值对需要这样遍历
            foreach (var item in ht.Keys)
            {
                Console.WriteLine("键是---{0}-------值是{1}", item, ht[item]);  //这里是遍历的是keys 所有item是键,ht[item] 是键对应的值;
            }

            foreach (var item in ht.Keys)
            {
                Console.WriteLine(item); //遍历key ;这里输出:1,2,3,false,数组
            }

            foreach (var item in ht.Values)
            {
                Console.WriteLine(item);//遍历value ;这里输出 张三,李四,王五,假,System.Int32[]
            }
            Console.ReadKey();
        }
    }
}

Dictionary<Tkey,Tvalue> 

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            //我们在定义Dictionary的时候就已经确定了它的键,和值的类型了。而在定义Hashtable这种键值对的的时候,并没有确定键和值的数据类型,
            Dictionary<int, object> o = new Dictionary<int, object>();
            o.Add(4, 5);
            o.Add(6, "b");

            foreach (var item in o.Keys)
            {
                Console.WriteLine(o[item]);
            }

            Console.ReadKey();
        }
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值