当前位置: 首页 > news >正文

20250606-C#知识:泛型与非泛型容器的基本操作

C#知识:泛型与非泛型容器的基本操作

这里介绍一下C#中几种常用的容器创建和增删改查。


1、有关容器的接口和类关系图

1.1 非泛型集合接口继承关系

在这里插入图片描述

1.2 非泛型集合类实现关系



1.3 泛型集合接口继承关系

在这里插入图片描述

1.4 泛型集合类实现关系

在这里插入图片描述



2、非泛型容器

  • using System.Collections;
  • 内部为Object类型,存在装箱拆箱

2.1 ArrayList动态数组

  • 一个能自动扩容的动态数组
  • 注意Remove方法只会删除第一个匹配的元素
ArrayList arrayList = new ArrayList();
//增
arrayList.Add(1);   
arrayList.Add("23");    
arrayList.Add(4.0f);   
arrayList.Add(5);   
arrayList.Add(6);   
arrayList.Add(6);   
arrayList.Add(true);
arrayList.Add(true);
arrayList.Insert(2, "GO ");
//删
arrayList.Remove("23");
arrayList.RemoveAt(0);
//改
arrayList[0] = "KFC";
//查
Console.WriteLine(arrayList.Contains(6));   //True
Console.WriteLine(arrayList.IndexOf(5));    //2
Console.WriteLine(arrayList.IndexOf(9));    //-1
Console.WriteLine(arrayList.LastIndexOf(true)); //6
Console.WriteLine(arrayList.Count); //7
Console.WriteLine(arrayList.Capacity);  //16arrayList.Insert(4, 9);
//遍历
for (int i = 0; i < arrayList.Count; i++)
{Console.Write(arrayList[i] + " ");
}
Console.WriteLine();    //KFC 4 5 6 9 6 True TruearrayList.Remove(6);    //只删除第一个6
//迭代器遍历
foreach(object item in arrayList)
{Console.Write(item + " ");
}
Console.WriteLine();   //KFC 4 5 9 6 True True

2.2 非泛型栈Stack

  • 后进先出
//非泛型栈创建
Stack stack = new Stack();//增
stack.Push(1);
stack.Push(2);
stack.Push(3);
stack.Push(4);
stack.Push(5);//删
object topValue = stack.Pop();  
Console.WriteLine(topValue);    //5//查
//查看栈顶元素
Console.WriteLine(stack.Peek());    //4
//查看栈是否包含元素
Console.WriteLine(stack.Contains(3));   //True//迭代器遍历
Console.WriteLine(stack.Count); //4
foreach (object item in stack)
{Console.Write(item + " ");
}
Console.WriteLine();    //4 3 2 1//将栈转换为数组遍历
object[] objects = stack.ToArray();
for(int i = 0;i < objects.Length;i++)
{Console.Write(objects[i] + " ");
}
Console.WriteLine();    //4 3 2 1

2.3 非泛型队列Queue

  • 先进先出
//创建
Queue queue = new Queue();
Queue<int> queue2 = new Queue<int>();//增
queue.Enqueue(1);
queue.Enqueue(2);
queue.Enqueue(3);
queue.Enqueue(4);
queue.Enqueue(5);
queue.Enqueue(6);//删
Console.WriteLine(queue.Dequeue()); //1//查
Console.WriteLine(queue.Peek());    //2
Console.WriteLine(queue.Contains(4));   //True//遍历类似栈,从头到尾遍历
foreach (object item in queue)
{Console.Write(item + " ");
}
Console.WriteLine();    //2 3 4 5 6

2.4 HashTable

  • 存放键值对
//创建
Hashtable hashtable = new Hashtable();
//增
hashtable.Add("v50", "KFC");
hashtable.Add("天王盖地虎", "宝塔镇河妖");
hashtable.Add("Damage", 100);
hashtable.Add(1, 3017);
//删
//根据键来删除,如果键不存在则取消删除操作
hashtable.Remove("Damage");//改
hashtable["v50"] = "UFO";//查
Console.WriteLine(hashtable["天王盖地虎"]);  //宝塔镇河妖
Console.WriteLine(hashtable.Contains(1));   //True
Console.WriteLine(hashtable.ContainsKey(1));    //True
Console.WriteLine(hashtable.ContainsValue(1));  //False//遍历
//通过键遍历
foreach (object item in hashtable.Keys)
{Console.Write("(" +item + " , ");Console.Write(hashtable[item] + ") ");
}
Console.WriteLine();    //(天王盖地虎 , 宝塔镇河妖) (v50 , UFO) (1 , 3017)//遍历所有值
foreach (object item in hashtable.Values) 
{ Console.Write($"{item} ");
}
Console.WriteLine();    //宝塔镇河妖 UFO 3017//遍历键值对
foreach (DictionaryEntry item in hashtable)
{Console.Write($"({item.Key} , ");Console.Write($"{item.Value}) ");
}
Console.WriteLine();    //(天王盖地虎 , 宝塔镇河妖) (v50 , UFO) (1 , 3017)//通过迭代器进行遍历
IDictionaryEnumerator dictionaryEnumerator = hashtable.GetEnumerator();
while(dictionaryEnumerator.MoveNext())
{Console.Write($"({dictionaryEnumerator.Key} , ") ;Console.Write($"{dictionaryEnumerator.Value}) ") ;
}
Console.WriteLine();    //(天王盖地虎 , 宝塔镇河妖) (v50 , UFO) (1 , 3017)


3、泛型容器

3.1 泛型数组List

  • 方法类似于ArrayList
List<int> list = new List<int>();

3.2 泛型字典Dictionary

  • 方法类似于HashTable
Dictionary<string, int> dictionary = new Dictionary<string, int>();

3.3 泛型栈

  • 方法类似于非泛型栈
Stack<int> stack2 = new Stack<int>();

3.4 泛型队列

  • 方法类似非泛型队列
Queue<int> queue2 = new Queue<int>();

3.5 双向链表LinkedList

  • 增删快,查改慢
  • 能访问某个节点的前置和后置
LinkedList<int> myLinkedList = new();
//增
myLinkedList.AddLast(5);
myLinkedList.AddFirst(4);
myLinkedList.AddFirst(3);
myLinkedList.AddFirst(1);LinkedListNode<int> node1 = myLinkedList.Find(3);
myLinkedList.AddBefore(node1, 2);
LinkedListNode<int> node2 = myLinkedList.Find(5);
myLinkedList.AddAfter(node2, 6);
//删
myLinkedList.RemoveFirst();
myLinkedList.RemoveLast();
myLinkedList.Remove(3);
//改
myLinkedList.First.Value = 9;
myLinkedList.Find(4).Value = 8;//遍历
LinkedListNode<int> currentNode = myLinkedList.First;
while(currentNode != null)
{Console.Write($"{currentNode.Value} ");currentNode = currentNode.Next;
}
Console.WriteLine();    //9 8 5

4、参考资料

  1. 《唐老狮C#》

本篇结束,感谢您的阅读~

在这里插入图片描述

相关文章:

  • 32单片机——基本定时器
  • 机器学习KNN算法全解析:从原理到实战
  • python 爬虫工具 mitmproxy, 几问几答,记录一下
  • Electron Fiddle使用笔记
  • React从基础入门到高级实战:React 实战项目 - 项目三:实时聊天应用
  • windows10搭建nfs服务器
  • 大数据学习(131)-Hive数据分析函数总结
  • 赋能大型语言模型与外部世界交互——函数调用的崛起
  • Spring Boot + Prometheus 实现应用监控(基于 Actuator 和 Micrometer)
  • Axios请求超时重发机制
  • JS手写代码篇---手写函数柯里化
  • 【Python 算法零基础 4.排序 ⑪ 十大排序算法总结】
  • 浏览器工作原理01 [#]Chrome架构:仅仅打开了1个页面,为什么有4个进程
  • 汽车的安全性能测试:试验台铁地板的重要性
  • Unity3D仿星露谷物语开发60之定制角色其他部位
  • 【题解-洛谷】P3370 【模板】字符串哈希
  • Docker + Nginx + Logrotate 日志管理与轮换实践
  • YUM仓库编译出现`conflicting requests`问题解决方案
  • Linux系统安装Docker
  • Python 构建法律DeepSeek RAG
  • 巴州建设工程信息网/企业seo培训
  • wordpress+增加域名/seo视频网页入口网站推广
  • 网站后台生成静态页面/百度网址大全首页
  • 网站建设可以自学吗/外链工具在线
  • wordpress维护模式/百度优化排名软件
  • 怎样网站建设/网络营销有哪些就业岗位