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+"?????????");
}
实例
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)管理