《数据结构与算法-C#描述》学习笔记-第一章
2010-01-22 00:57
295 查看
Collections类.泛型类和Timing类概述
1.Collections (群集)
1.1 Collections描述
Collections是一种结构化的数据结构.他存储数据并且提供对数据的C.R.U.D操作以及对群集不同属性的设置.{Collections就是一个用来存东西的可变的盒子,你可以给里面存放东西,拿出东西,当然你也可以改变它的大小,颜色等.}群集分为线性群集和非线性群集
1.2 线性群集:
线性群集是一张元素列表,表中的元素顺次相连.线性群集通常由位置来决定次序.{线性群集可以认为就是一个长方形的盒子,你放进去的东西都有一定的顺序,并且按照顺序可以来找到东西}线性群集主要分为直接存取群集,顺序存取群集
1.2.1直接存取群集
直接存取群集包括数组.字符串(String),结构(Struct){直接存取群集就是可以按照索引直接进行访问数据,比如数组你可以根据index直接查找到数组内你想找的数据}
1.2.2顺序存取群集
顺序存取群集是把群集元素按顺序存储的表,也可以称之为线性表,线性表可以动态的扩展和收缩.线性表既可以是有序的也可以是无序的.线性表包括栈和队列.散列表,字典.{这里要注意的就是栈是后进先出,相当汉诺塔,如果要拿出最底下的盘子,就一定要先拿走上面的盘子,而最底下的盘子肯定是最早放进去的 后进先出队列是先进先出,相当于我们去车站买票排队,这个不出意外情况的话是先排队的人先买到票然后走出这个队列.,散列表就是一组与键相关联的数据,也就是一堆数据中取出一个具有代表性的数据来代表这对数据,就相当于我们的手机卡,手机卡包括手机号,机主姓名,开户时间,话费,等信息,但是我们一般使用的时候只记手机号,那么这时候手机号就是手机卡信息的键.字典呢,就相当于身份证和我们,身份证一个人只有一个,但是身份证可以代表这个人,是一对一的关系}
1.3 非线性群集:
非线性群集所包含的元素在群集内没有位置次序之分(非线性群集可以比作给一个不规则形状的盒子)
1.3.1 层次群集
层次群集是一组划分了层次的数据项集合,位于某一层的数据可能会有位于下一较低层上的后继数据项{这里最常见的就是树,树有二叉树,堆等.二叉树就是树的每个节点最多只能有两个子节点,这就相当于我们最多只有2只眼睛,你别给我提杨戬.而堆就像我堆的最小或最大值永远在根节点.堆主要用来排序.}
1.3.2 组群集
集合,图,网络是组群集三种主要类型.集合是一种无需数据值的群集,平且集合中每一个数据值都是唯一的.图是由节点集合以及节点相连的边集合组成的.网络是一种特殊类型的图,其中每一条边都被赋予了权{这块不是很懂.希望通过学习能够明白}
1.4 CollectionBase类
{这里主要讲了如何通过继承CollectionBase类来实现自定义的Collection类.CollectionBase类提供了一套可以实现自定义的Collection的抽象方法集合和一种基础数据结构-InnerList(其实就是一个ArrayList)}
2. 泛型编程
泛型就是使某一个值具有多种数据类型,同时又仅提供此值的一种定义.通用类型T只是一个占位符。泛型避免了代码膨胀的问题。C#的泛型类型可以应用于强大的反射技术.{这里说泛型和object的区别以及优势以List<obiect>和List<T>.1是提高性能,如果是object的话,如果项是值类型的话,那么每次操作都需要装箱拆箱如果项是引用类型呢,接收的时候就得转换类型2是安全,比如我们传入一个int类型和string类型,但是接收的时候用int来循环接收,那么这时候就会产生编程错误,而用泛型就不会出现这样的问题,你是什么类型在你创建的时候已经决定了.}
3. 时间测试(Timing)
在.net环境下进行时间测试需要考虑两个问题程序运行所处的的线程以及无用单元收集的影响.对于线程问题,我们采用Process类可以选取当前的进程,选取程序运行其内的县城,以及选取存储县城开始执行时间的计时器.对于垃圾回收GC问题,先让系统收集所有无用单元,然后再让系统等待程序挂起当前线程,直到处理终结器队列的线程清空该队列为止.
以上所有观点都只是我在学习之后所得出个人的想法而已,如有不对和不足之处请指出.谢谢
1.Collections (群集)
1.1 Collections描述
Collections是一种结构化的数据结构.他存储数据并且提供对数据的C.R.U.D操作以及对群集不同属性的设置.{Collections就是一个用来存东西的可变的盒子,你可以给里面存放东西,拿出东西,当然你也可以改变它的大小,颜色等.}群集分为线性群集和非线性群集
1.2 线性群集:
线性群集是一张元素列表,表中的元素顺次相连.线性群集通常由位置来决定次序.{线性群集可以认为就是一个长方形的盒子,你放进去的东西都有一定的顺序,并且按照顺序可以来找到东西}线性群集主要分为直接存取群集,顺序存取群集
1.2.1直接存取群集
直接存取群集包括数组.字符串(String),结构(Struct){直接存取群集就是可以按照索引直接进行访问数据,比如数组你可以根据index直接查找到数组内你想找的数据}
1.2.2顺序存取群集
顺序存取群集是把群集元素按顺序存储的表,也可以称之为线性表,线性表可以动态的扩展和收缩.线性表既可以是有序的也可以是无序的.线性表包括栈和队列.散列表,字典.{这里要注意的就是栈是后进先出,相当汉诺塔,如果要拿出最底下的盘子,就一定要先拿走上面的盘子,而最底下的盘子肯定是最早放进去的 后进先出队列是先进先出,相当于我们去车站买票排队,这个不出意外情况的话是先排队的人先买到票然后走出这个队列.,散列表就是一组与键相关联的数据,也就是一堆数据中取出一个具有代表性的数据来代表这对数据,就相当于我们的手机卡,手机卡包括手机号,机主姓名,开户时间,话费,等信息,但是我们一般使用的时候只记手机号,那么这时候手机号就是手机卡信息的键.字典呢,就相当于身份证和我们,身份证一个人只有一个,但是身份证可以代表这个人,是一对一的关系}
1.3 非线性群集:
非线性群集所包含的元素在群集内没有位置次序之分(非线性群集可以比作给一个不规则形状的盒子)
1.3.1 层次群集
层次群集是一组划分了层次的数据项集合,位于某一层的数据可能会有位于下一较低层上的后继数据项{这里最常见的就是树,树有二叉树,堆等.二叉树就是树的每个节点最多只能有两个子节点,这就相当于我们最多只有2只眼睛,你别给我提杨戬.而堆就像我堆的最小或最大值永远在根节点.堆主要用来排序.}
1.3.2 组群集
集合,图,网络是组群集三种主要类型.集合是一种无需数据值的群集,平且集合中每一个数据值都是唯一的.图是由节点集合以及节点相连的边集合组成的.网络是一种特殊类型的图,其中每一条边都被赋予了权{这块不是很懂.希望通过学习能够明白}
1.4 CollectionBase类
{这里主要讲了如何通过继承CollectionBase类来实现自定义的Collection类.CollectionBase类提供了一套可以实现自定义的Collection的抽象方法集合和一种基础数据结构-InnerList(其实就是一个ArrayList)}
2. 泛型编程
泛型就是使某一个值具有多种数据类型,同时又仅提供此值的一种定义.通用类型T只是一个占位符。泛型避免了代码膨胀的问题。C#的泛型类型可以应用于强大的反射技术.{这里说泛型和object的区别以及优势以List<obiect>和List<T>.1是提高性能,如果是object的话,如果项是值类型的话,那么每次操作都需要装箱拆箱如果项是引用类型呢,接收的时候就得转换类型2是安全,比如我们传入一个int类型和string类型,但是接收的时候用int来循环接收,那么这时候就会产生编程错误,而用泛型就不会出现这样的问题,你是什么类型在你创建的时候已经决定了.}
3. 时间测试(Timing)
在.net环境下进行时间测试需要考虑两个问题程序运行所处的的线程以及无用单元收集的影响.对于线程问题,我们采用Process类可以选取当前的进程,选取程序运行其内的县城,以及选取存储县城开始执行时间的计时器.对于垃圾回收GC问题,先让系统收集所有无用单元,然后再让系统等待程序挂起当前线程,直到处理终结器队列的线程清空该队列为止.
using System; using System.Collections; using System.Text; using System.Diagnostics; public class Timing { TimeSpan startTime; TimeSpan duration; public Timing() { duration = new TimeSpan(0); } public void StopTime() { duration = Process.GetCurrentProcess().Threads[0].TotalProcessorTime.Subtract(startTime); } public void StartTime() { GC.Collect(); GC.WaitForPendingFinalizers(); startTime = Process.GetCurrentProcess().Threads[0].TotalProcessorTime; } public TimeSpan Result() { return duration; } } class chapter1 { static void Main() { Timing t = new Timing(); t.StartTime(); BuildArrayList(1000000); t.StopTime(); Console.WriteLine("BuildArrayList:" + t.Result().TotalMilliseconds); } static void BuildArrayList(int count) { ArrayList list = new ArrayList(); for (int i = 0; i < count; i++) { list.Add(i); } } }
以上所有观点都只是我在学习之后所得出个人的想法而已,如有不对和不足之处请指出.谢谢
相关文章推荐
- 《数据结构与算法-C#描述》学习笔记-第一章
- 黑马程序员之c#学习笔记:描述线程与进程的区别?
- 深入.NET平台和C#编程 第一章 学习笔记
- 数据结构与算法C++描述学习笔记1、辗转相除——欧几里得算法
- 《Web Service 编程 --用C#.NET 开发网络服务》北京希望出版社 我的学习笔记(第一章)(也就是书上抄了一写东西而已)
- 『框架设计(第2版)CLR Via C#』学习笔记(002)——将托管代码合并到程序集
- JAVASE学习笔记:第一章 认识JAVA
- C# 学习笔记2
- C#学习笔记(三)
- C#可扩展编程之MEF学习笔记(五):MEF高级进阶
- DataBase 学习笔记一:c#连接SQL数据库
- C#学习笔记 文件操作
- UNITY 2D学习笔记(二):C#脚本编写
- C# 学习笔记(File I/O with Streams) - 09
- C#学习笔记—了解C#
- c#高级编程第七版 学习笔记 第二章 核心c#
- C#学习笔记 4 常量和变量
- C#学习笔记 5 运算符
- C#操作数据库 学习笔记
- C#学习笔记(四)