news 2026/5/1 6:15:13

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 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}");
}

遍历hash所有键值对


foreach (DictionaryEntry item in hashtable)
{
//Console.WriteLine(item); //看看item啥类型 System.Collections.DictionaryEntry
Console.WriteLine(item.Value+"?????????");
}

实例

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

//栈和队列


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

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

实例

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)管理

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/2 21:41:55

Xapian: 一款C++全文检索解决方案

目录 1.简介 2.安装与集成 2.1.vcpkg 一键安装&#xff08;推荐&#xff0c;自动解决依赖&#xff09; 2.2.源码编译&#xff08;适合定制化 / 无网络环境&#xff09; 2.3.工程集成&#xff1a;CMake 配置&#xff08;直接复用&#xff09; 3.核心功能实战 3.1.创建索引…

作者头像 李华
网站建设 2026/4/15 0:22:16

[架构之路-277]:架构活动不同阶段目标和决策的挑战不同,需要不同的思维模式:想法形成阶段需要全方位思维,又称系统思维;架构规划阶段需要批判性性思维;实时阶段需要实用性思维;复盘阶段需要分析性思维;

&#x1f9e0; 架构活动四阶段思维模式模型——根据目标与挑战动态切换认知方式核心理念&#xff1a; 架构不是一成不变的设计成果&#xff0c;而是一个随项目演进而不断调适的认知过程。 优秀的架构师不仅要掌握技术&#xff0c;更要能在不同阶段启用适配性的思维模式&#xf…

作者头像 李华
网站建设 2026/4/13 7:53:03

中小企业必备:低成本搭建智能客服系统的秘诀

中小企业如何用一台普通电脑搭建安全可控的智能客服系统&#xff1f; 在客户咨询量日益增长的今天&#xff0c;许多中小企业正面临一个两难困境&#xff1a;一边是不断攀升的人力成本&#xff0c;一边是用户对响应速度和专业度越来越高的期待。传统的客服模式依赖人工轮班、反…

作者头像 李华
网站建设 2026/4/25 7:02:21

Java核心面试题终极总结:从基础到进阶,覆盖高频考

Java作为后端开发的主流语言&#xff0c;其核心知识点始终是面试考察的重点。无论是校招还是社招&#xff0c;面试官都会围绕Java基础、面向对象、集合框架、异常处理、关键字特性等核心模块展开提问。本文整理了Java开发中高频出现的38道核心面试题&#xff0c;按知识模块进行…

作者头像 李华
网站建设 2026/4/18 9:58:04

张雪峰推崇 “干安全有前景”,为何众多网友并不认同?

在一次演讲中&#xff0c;张雪峰老师说&#xff1a;学网络安全/信息安全准没错 但实际情况是&#xff0c;很多网友并不买账。 一位大二的网安专业的同学&#xff0c;在社交媒体上发文咨询&#xff1a; 一开始报网安是因为看到说网络安全前景很好&#xff0c;but这一年随着我在…

作者头像 李华
网站建设 2026/4/19 21:31:09

本地搭云盘还能远程用?Cloudreve + cpolar内网穿透的简单方案

文章目录 前言1. 安装Docker2. 使用Docker拉取镜像3. 创建并启动Cloudreve容器4. 本地访问测试5. 公网远程访问本地Cloudreve5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定公网地址远程访问 前言 Cloudreve 是一款个人和团队都能用的云盘系统&#xff0c;支持文件…

作者头像 李华