zoukankan      html  css  js  c++  java
  • GetHashCode 与HashTable ,Dictionary

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Text.RegularExpressions;
    using System.IO;
    using System.Collections;
    using Data = System.Data.SqlClient;
    
    namespace COL_TEST
    {
        class Program
        {
            static void Main(string[] args)
            {
                //一个对象的 GetHashCode 方法必须总是返回同一个哈希代码
                //Console.WriteLine(ht.GetHashCode());
                //Console.WriteLine(ht.GetHashCode());
    
                A a = new A(2, 2);
                A aa = new A(1, 4);
                A bb = new A(1, 3);
                Dictionary<A, int> hs = new Dictionary<A, int>();
                hs.Add(a, 2);
                hs.Add(aa, 2);
                hs.Add(bb, 2);
    
                foreach (KeyValuePair<A, int> p in hs)
                {
                    Console.WriteLine("Key: " + p.Key + "   Value: " + p.Value);
                    Console.WriteLine("hashCode:{0}", p.Key.GetHashCode());
                }
    
                Console.WriteLine("-----------------");
                /***************/
                Hashtable hht = new Hashtable();
                Class3 cc = new Class3(2, 3);
                Class3 cc2 = new Class3(1, 4);
                Class3 cc3 = new Class3(3, 3);
                hht.Add(cc, "test1");
                hht.Add(cc2, "test2");
                hht.Add(cc3, "test3");
                //cc.x = 5;  //如果修改cc的状态,会导致cc遍历不到
                foreach (var item in hht.Keys)
                {
                    Console.WriteLine(item.ToString());
                    Console.WriteLine(hht[item]);
                }
                Console.Read(); 
    
                //如果将一个引用类型的数据加入到hashTable中,首先会调用该类型的GetHashCode方法,返回的键值为重写toString 方法返回值
                //
            }
        }
    
        public struct MyStruct
        {
    
            public int _sx;
            public string _msg;
    
            public int _id;
    
            public DateTime _epoch;
    
        }
    
    
    
        class A
        {
            int i, j;
            public A(int i, int j)
            {
                this.i = i;
                this.j = j;
            }
    
            public override Int32 GetHashCode()
            {
                return i * j;
            }
            public override string ToString()
            {
                return String.Format("({0},{1})", i, j);
            }
        }
        class Class3
        {
            public int x;
            int y;
            public Class3(int x, int y)
            {
                this.x = x;
                this.y = y;
            }
            public override int GetHashCode()
            {
                Console.WriteLine("判断hashcode");
                return x + y;
            }
            public override bool Equals(object obj)
            {
                Console.WriteLine("判断equals");
                return base.Equals(obj);
            }
            public override string ToString()
            {
                return x.ToString() + y.ToString();
            }
        }  
    
    }
    

  • 相关阅读:
    Linux Linux程序练习九
    Linux 进程与线程四(加锁--解锁)
    Linux 进程与线程三(线程比较--创建线程参数)
    Linux 进程与线程二(等待--分离--取消线程)
    Linux 进程与线程一(创建-关闭线程)
    python值传递和指针传递
    Django-Model操作数据库(增删改查、连表结构)
    django model 插入数据方法
    jQuery ajax()使用serialize()提交form数据
    python版 google密码认证器
  • 原文地址:https://www.cnblogs.com/voidobject/p/3975488.html
Copyright © 2011-2022 走看看