C#哈希表遍历技巧全解析以及栈 堆 队列的认识

hash表以及遍历方法

//数组结构:长度是固定 类型是固定

int\[\] is1 = { 1, 2, 3 };

//动态集合:长度不固定,类型不固定,存储是object类型

ArrayList list = new ArrayList();

//泛型集合:长度不固定,类型固定

List<int> list1 = new List<int>();

//字典:长度不固定 类型固定

Dictionary<int,int> dict = new Dictionary<int,int>();

//hash表:和字典很类似,存储时候也是键值对的方法进行存储的,通过键获取对应的值,和字典不同地方在于,哈希表存储键值对类型不固定

Hashtable hashtable = new Hashtable();

遍历

//3遍历hash所有的keys

foreach (var item in hashtable.Keys)

{

}

遍历hash所有的values

foreach (var item in hashtable.Values)

{

}

for循环遍历hash所有的Keys和values

object\[\] keys = new objecthashtable.Count; // 定义object类型数组

hashtable.Keys.CopyTo(keys, 0);// 把hashtable.Keys所有元素复制到keys,

for (int i = 0; i < keys.Length; i++)

{

object key = keysi;

object value = hashtablekey; // 通过键获取值

Console.WriteLine($"键:{key},值:{value}");

}

遍历hash所有键值对

foreach (DictionaryEntry item in hashtable)

{

//Console.WriteLine(item); //看看item啥类型 System.Collections.DictionaryEntry

Console.WriteLine(item.Value+"?????????");

}

实例

cs 复制代码
internal class Program
{
    static void Main(string[] args)
    {
        
        Hashtable hashtable = new Hashtable(); //创建hash表
        //1添加键值对
        hashtable.Add(1, 2);
        hashtable.Add("name", "张三");

        //2 查询键对应的值
        Console.WriteLine(hashtable[1]);//获取对应键的值

        //3遍历hash所有的keys
        foreach (var item in hashtable.Keys)
        {
            Console.WriteLine(item+"--------");
        }

        //4遍历hash所有的values
        foreach (var item in hashtable.Values)
        {
            Console.WriteLine(item + "+++++++");
        }

        object[] keys = new object[hashtable.Count]; // 定义object类型数组
        hashtable.Keys.CopyTo(keys, 0);// 把hashtable.Keys所有元素复制到keys,

        for (int i = 0; i < keys.Length; i++)
        {
            object key = keys[i];
            object value = hashtable[key]; // 通过键获取值
            Console.WriteLine($"键:{key},值:{value}");
        }

        //6 清空键值对
        // hashtable.Clear(); 

        //7指定键进行移除
        hashtable.Remove(1);

        //8 包含这个键
        Console.WriteLine(hashtable.ContainsKey("name"));

        //9 修改
        hashtable["name"] = "你好";

        //10 键值对个数
        Console.WriteLine(hashtable.Count);

        //5 遍历hash所有键值对
        foreach (DictionaryEntry item in hashtable)
        {
           //Console.WriteLine(item); //看看item啥类型 System.Collections.DictionaryEntry
           Console.WriteLine(item.Value+"?????????");
        }
        Console.ReadKey();
    }

}

//栈和队列

按照线性数据结构据,数存储方式进行对比的

//栈:对要操作元素会进行一个后进先出的操作,例如:现实场景电梯,先进去的人最后才出来,后进去的人先出来

//添加元素称为入栈操作

//取出一个元素操作称为出栈

实例

cs 复制代码
 internal class Program
 {
     static void Main(string[] args)
     {
       
         Stack<string> stack = new Stack<string>();//存放字符串栈结构
         stack.Push("张三");// 入栈
         stack.Push("李四");
         stack.Push("王五");


        string name =  stack.Pop();//出栈 
        Console.WriteLine(name+"-----");//王五
        Console.WriteLine(stack.Peek()); //获取栈顶元素 李四
        Console.WriteLine(stack.Count);// 2个
        //stack.Clear(); 清空栈
        //stack.ToArray() ; //转成数组


         //队列:对元素进行先进先出的操作  例如现实场景排队买饭
         //添加元素一般入队操作
         //取出元素一般出队=操作
         Queue<string> queue = new Queue<string>();
         queue.Enqueue("腾"); //入队
         queue.Enqueue("云");
         queue.Enqueue("嘉");

         Console.WriteLine(queue.Count);
         Console.WriteLine(queue.Dequeue()); //出队马化腾
         Console.WriteLine(queue.Peek());//获取队顶元素马云

       //  queue.Clear(); 清空队列


         Console.ReadKey();
     }
 }

栈和堆的区别

/按照存储区域分别解释堆和栈

//特性 栈**(Stack**) 堆(Heap)

//存储内容 值类型 、方法参数、局部变量 引用类型对象 、装箱的值类型

//生命周期 随作用域结束自动释放 由垃圾回收器(GC)管理

//分配速度 快(指针移动) 慢(动态查找可用内存)

//内存布局 连续内存 非连续(可能产生碎片)

//访问方式 直接 通过引用间接访问

//线程关联 每个线程独有 所有线程共享

//管理方式 编译器自动管理 垃圾回收器(GC)管理

相关推荐
小雨下雨的雨3 小时前
井字棋AI机器人实现详解 - Minimax算法实战-鸿蒙PC Electron框架完成
前端·人工智能·算法·华为·electron·鸿蒙
xieliyu.5 小时前
Java算法精讲:双指针(三)
java·开发语言·算法
Micro麦可乐5 小时前
Spring Boot 实战:从零设计一个短链系统(含完整代码与数据库设计)
数据库·spring boot·后端·哈希算法·雪花算法·短链系统
一条小锦吕*5 小时前
基于Spring Boot + 数据可视化 + 协同过滤算法的推荐系统设计与实现(源码+论文+部署全讲解)
spring boot·算法·信息可视化
如竟没有火炬7 小时前
最大矩阵——单调栈
数据结构·python·线性代数·算法·leetcode·矩阵
8Qi88 小时前
LeetCode 1143 & 718:最长公共子序列 / 最长重复子数组
算法·leetcode·职场和发展·动态规划
绿算技术8 小时前
万卡推理集群存储选型分析:从核心架构到应用视角
大数据·科技·算法·架构
电报号dapp1198 小时前
DApp经济模型设计:2026年反泡沫完全指南
区块链·智能合约·哈希算法
想吃火锅10059 小时前
【leetcode】1.两数之和js版
javascript·算法·leetcode