设为首页 加入收藏

TOP

数据类型和特殊类型-C#(一)
2019-09-23 11:13:04 】 浏览:117
Tags:数据 类型 特殊 -C#

参考地址:https://blog.csdn.net/qiaoquan3/article/details/51380992

1、集合set:纯粹的数据集合

2、线性结构:一对一的,数组

3、树形结构:一对多的,菜单/文件夹/类别/属性控件/表达式目录树

4、图形/网状结构:多对多,地图应用比较多,网站的应用比较少

 

线性结构:

Array/ArrayList/List/LinkedList/Queue/Stack/HastSet/SortedSet/Hashtable/SortedList/Dictionary/SortedDictionary

IEnumerable、ICollection、IList、IQueryable

接口是标机功能的,不同的接口岔开,就是为了接口隔离;虽然我们接口内容也可以复用。

IEnumerable任何数据集合,都实现了的,为不同的数据结构,提供了统一数据访问方式,这个就是迭代器模式。

1、内存连续存储,节约空间,可以索引访问,读取速度快,增删慢

  Array:在内存上连续分配的,而且元素类型是一样的。

 int[] intArray = new int[3];
 intArray[0] = 123;
 string[] stringArray = new string[] { "123", "234" };//Array

  ArrayList:不定长的,连续分配的;元素没有类型限制,任何元素都是当成object处理,如果是值类型,会有装箱操作;读取快,增删慢。

 ArrayList arrayList = new ArrayList();
 arrayList.Add("Bingle1");
 arrayList.Add("Bingle2");
 arrayList.Add(32);//add增加长度
 //arrayList[4] = 26;//索引复制,不会增加长度
 //删除数据
 //arrayList.RemoveAt(4);
 var value = arrayList[2];
 arrayList.RemoveAt(0);
 arrayList.Remove("Bingle2");

  List<T>:也是Array,内存上都是连续拜访的;不定长;泛型,保证类型安全,避免装箱拆箱;读取快,增删慢。

List<int> intList = new List<int>() { 1, 2, 3, 4 };
intList.Add(123);
intList.Add(123);
//intList.Add("123");
//intList[0] = 123;
List<string> stringList = new List<string>();
//stringList[0] = "123";//异常的
foreach (var item in intList)
{

}

2、非连续拜访的,存储数据+地址,找书的话就只能顺序查找,读取就比较慢,增删快

  LinkedList<T>:泛型的特点;链表,元素不连续分配,每个元素都有记录前后节点;节点值可以重复。能不能下标访问?不能的,找元素就只能遍历,查找不方便,增删就比较方便。

 LinkedList<int> linkedList = new LinkedList<int>();
 //linkedList[3]
 linkedList.AddFirst(123);
 linkedList.AddLast(456);

 bool isContain = linkedList.Contains(123);
 LinkedListNode<int> node123 = linkedList.Find(123);  //元素123的位置  从头查找
 linkedList.AddBefore(node123, 123);
 linkedList.AddBefore(node123, 123);
 linkedList.AddAfter(node123, 9);

 linkedList.Remove(456);
 linkedList.Remove(node123);
 linkedList.RemoveFirst();
 linkedList.RemoveLast();
 linkedList.Clear();

  Queue:就是链表,先进先出,放任务延迟执行,A不断写入日志任务,B不断获取任务去执行

 Queue<string> numbers = new Queue<string>();
 numbers.Enqueue("one");
 numbers.Enqueue("two");
 numbers.Enqueue("three");
 numbers.Enqueue("four");
 numbers.Enqueue("four");
 numbers.Enqueue("five");

 foreach (string number in numbers)
 {
     Console.WriteLine(number);
 }

 Console.WriteLine($"Dequeuing '{numbers.Dequeue()}'");
 Console.WriteLine($"Peek at next item to dequeue: { numbers.Peek()}");
 Console.WriteLine($"Dequeuing '{numbers.Dequeue()}'");

 Queue<string> queueCopy = new Queue<string>(numbers.ToArray());
 foreach (string number in queueCopy)
 {
     Console.WriteLine(number);
 }

 Console.WriteLine($"queueCopy.Contains(\"four\") = {queueCopy.Contains("four")}");
 queueCopy.Clear();
 Console.WriteLine($"queueCopy.Count = {queueCopy.Count}");

  Stack:就是链表,先进后出,解析表达式目录树的时候,先产生的数据后使用。操作记录为命令,撤销的时候是倒叙的。

 Stack<string> numbers = new Stack<string>();
 numbers.Push("one");
 numbe
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C#中 EF 性能优化 下一篇WPF自定义控件的制作

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目