Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >数据结构与算法2016-06-03

数据结构与算法2016-06-03

作者头像
发布于 2018-09-03 08:44:06
发布于 2018-09-03 08:44:06
3580
举报
文章被收录于专栏:WD学习记录WD学习记录

1.递归

一个算法调用自己来完成它的部分工作,在解决某些问题时,一个算法需要调用自身。如果一个算法直接调用自己或间接调用自己,就称这个算法是递归的。根据调用方式的不同,它分为直接递归和间接递归。

一个递归算法必须由两个部分:初始部分和递归部分。初始部分只处理可以直接解决而不需要再次递归调用的简单输入。递归部分包含对算法的一次或多次递归调用,每一次的调用参数都在某种程度上比原始调用参数更接近初始情况。

2. 接口

通用语言运行时(clr)支持单实现继承和多接口继承。

单实现继承是指一个类型只能有一个基类型。多接口继承是指一个类型可以继承多个接口,而接口是类之间相互交互的一个抽象,把类之间需要交互的内容抽象出来定义成接口,可以更好地控制类之间的逻辑交互。可见,接口内容的抽象的好坏关系到整个程序逻辑质量。另外可以在任何时候通过开发附加接口和实现来添加新的功能。

关于接口的很重要的概念是接口只包含成员定义,不包含成员的实现。接口仅仅是一个包含着一组虚方法的抽象类型。成员的实现需要在继承的类或者结构中实现。接口的成员包括静态方法、索引器、常数、事件以及静态构造器等,不包含任何实例资源或实例构造器,所以,不能实例化一个接口。

3.常用的接口

(1)IComparable接口

IComparable接口定义通用的比较方法。由类型使用的IComparable接口提供了一种比较多个对象的标准方式。如果一个类要实现与其他对象的比较,则必须实现IComparable接口。由可以排序的类型,例如值类型实现以创建适合排序等目的类型特定的比较方法。

(2)IEnumerable接口

IEnumerable接口公开枚举数,该枚举数支持再集合上进行简单迭代。

IEnumerable接口可由支持迭代内容对象的类实现。

(3)IEnumerator接口

IEnumerator接口支持在集合上进行简单迭代。是所有枚举数的基接口。枚举数只允许读取集合中的数据,枚举数无法用于修改基础集合。

(4)ICollection接口

ICollection接口定义所有集合的大小、枚举数和同步方法。ICollection接口是System.Collections命名空间中类的基接口。

(5)IDictionary接口

IDictionary接口是基于ICollection接口的更专用的接口。IDictionary接口实现是键值对的集合,如Hashtable类。

(6)IList接口

IList接口实现是可被排序且可按照索引访问其成员的值的结合,如ArrayList类。

4.接口与抽象类

抽象类与接口在定义与功能上有很多相似的地方,在程序中选择使用抽象类还是接口需要比较抽象类和接口之间的具体差别。

抽象类是一种不能实例化而必须从中继承的类,抽象类可以提供实现,也可以不提供实现。子类只能从一个抽象类继承。抽象类应主要用于关系密切的对象。如果要设计大的功能单元或创建组件的多个版本,则使用抽象类。

接口是完全抽象的成员集合,不提供实现,类或者结构可以继承多个接口。接口最适合为不相关的类提供通用功能。如果要设计小而简练的功能块,则使用接口。接口一旦创建就不能更改,如果需要接口的新版本,必须创建一个全新的接口。

5.接口的实现

接口的实现分为隐式实现和显式实现。如果类或结构要实现的是单个接口,可以使用隐式实现,如果类或者结构继承了多个接口,那么接口中相同名称成员就要显式实现。显示实现是通过使用接口的完全限定名来实现接口成员的。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016年06月03日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C#语言各种集合介绍
集合,表示可以通过遍历每个元素来访问的一组对象(特别是可使用foreach循环访问) 一个集合包括多个元素,即有一个集合类对象和N个元素对象
全栈程序员站长
2022/07/15
7570
C#集合类型大揭秘
集合是.NET FCL(Framework Class Library)的重要组成部分,我们平常撸C#代码时免不了和集合打交道,FCL提供了丰富易用的集合类型,给我们撸码提供了极大的便利。正是因为这种
撸码那些事
2018/06/21
1.7K0
CA1010:集合应实现泛型接口
类型实现 System.Collections.IEnumerable 接口,但不能实现 System.Collections.Generic.IEnumerable<T> 接口和包含程序集的目标 .NET。 此规则会忽略能够实现 System.Collections.IDictionary 的类型。
用户4268038
2022/01/10
7160
C#集合类型大揭秘
集合是.NET FCL(Framework Class Library)的重要组成部分,我们平常撸C#代码时免不了和集合打交道,FCL提供了丰富易用的集合类型,给我们撸码提供了极大的便利。正是因为这种与生俱来的便利性,使得我们对集合既熟悉又陌生。很多同学可能一直还是停留在使用的层面上,那么今天我们一起来深入学习一下C#语言中的各种集合。
撸码那些事
2018/06/15
1.4K0
C#集合类型大揭秘
框架设计原则和规范(四)
祝大家平安夜平安,圣诞节快乐! 此文是《.NET:框架设计原则、规范》的读书笔记,本文内容较多,共分九章,将分4天进行推送,今天推送最后两章。 1. 什么是好的框架 2. 框架设计原则 3. 命名规范 4. 类型设计规范 5. 成员设计规范 6. 扩展性设计 7. 异常 8. 使用规范 9. 设计模式 一、 使用规范 1. 数组 1) 要在公共API中优先使用集合,避免使用数组。 2) 不要使用只读(readonly)的数组字段。这种数组用户仍然可以修改数组中的元素 3) 考虑使用不规则数组(jagged
韩伟
2018/03/05
1.6K0
.NET面试题系列[11] - IEnumerable<T>的派生类
ICollection<T>继承IEnumerable<T>。在其基础上,增加了Add,Remove等方法,可以修改集合的内容。IEnumerable<T>的直接继承者还有Stack<T>和Queue<T>。
s055523
2018/09/14
2.1K0
.NET面试题系列[11] - IEnumerable<T>的派生类
C#集合类型大盘点
C#集体类型( Collections in C#)   集合是.NET FCL(Framework Class Library)中很重要的一部分,也是我们开发当中最常用到的功能之一,几乎是无处不在。俗话说知其然,知其所以然,平常看到IEnumerable,IEnumerator,ICollection是不是知道他们之间各自的区别?除了List和Dictionary以外,你还用过哪些其它的集合类?废话少说,今天我们就来看一些这些定义集合类的接口以及他们的实现。 集合接口   先来看一下,FCL为我们提供了哪
用户1153966
2018/03/14
1.2K0
C#集合类型大盘点
浅谈泛型
我们在写一些通用库的时候,经常需要写一个算法,比如交换,搜索,比较,排序,转换等算法,但是需要支持int,string等多种类型。通常我们可能会把代码复制多遍分别处理不同类型的数据。有没有一种办法,让我们只写一遍算法的实现,就可以支持所有类型的数据?泛型(generic)是C#提供的一种机制,它可以提供这种形式的代码重用,即“算法重用”。简单来说,开发人员在定义算法的时候并不设定算法操作的数据类型,而是在使用这个算法的时候再指定具体的数据类型。大多数算法都封装在一个类型中,CLR允许创建泛型引用类型和泛型值类型,以及泛型接口和泛型委托。所以CLR允许在类或接口中定义泛型方法。来看一个简单例子,Framework类库定义了一个泛型列表算法,它知道如何管理对象集合。泛型算法没有设定数据的类型。要在使用这个泛型列表算法时指定具体的数据类型。封装了泛型列表算法的FCL类称为List<T>。这个类是System.Collections.Generic命名空间中定义的。下面展示了类的定义:
小蜜蜂
2019/07/14
1.2K0
.NET中的泛型集合
近对集合相关的命名空间比较感兴趣,以前也就用下List, Dictionary<Tkey, TValue>之类,总之,比较小白。点开N多博客,MSDN,StackOverflow,没找到令我完全满意的答案,本打算自己总结下写出来,工作量好大的感觉……直到昨晚随意翻到看了一些又放下的《深入理解C#》-附录B部分,高兴地简直要叫出来——“这总结真是太绝了,好书不愧是好书”。真是“踏破铁鞋无觅处,得来全不费工夫”,最好的资源就在眼下,而自己居然浑然不知。或许只有深入技术细节的时候,才能认识到经典为什么经典吧!言归正传,本博客主要是对《深入理解C#》-附录B的摘录,并加了些标注。
郑子铭
2023/08/29
6760
.NET中的泛型集合
最全数据结构详述: List VS IEnumerable VS IQueryable VS ICollection VS IDictionary
本文对常用的数据结构详述:Array, ArrayList,List,IList,ICollection, Stack, Queue, HashTable, Dictionary, IQueryabl
葡萄城控件
2018/01/10
2.1K0
最全数据结构详述: List VS IEnumerable VS IQueryable VS ICollection VS IDictionary
笔记《Effective Java》03(下):类和接口
《Effective Java》这本书可以说是程序员必读的书籍之一。这本书讲述了一些优雅的,高效的编程技巧。对一些方法或API的调用有独到的见解,还是值得一看的。刚好最近重拾这本书,看的是第三版,顺手整理了一下笔记,用于自己归纳总结使用。建议多读一下原文。今天继续整理第三章节:类和接口,下篇。
有一只柴犬
2025/04/04
1210
笔记《Effective Java》03(下):类和接口
ASP.NET MVC三个重要的描述对象:ActionDescriptor
在Model绑定过程中会通过激活的Controller类型创建用于描述它的ControllerDescriptor对象。Controller是一组Action方法的集合,而每一个Action通过Act
蒋金楠
2018/01/15
9090
快速入门系列--CLR--03泛型集合
.NET中的泛型集合 在这里主要介绍常见的泛型集合,很多时候其并发时的线程安全性常常令我们担忧。因而简述下.NET并发时线程安全特性,其详情请见MSDN。 普通集合都不支持多重并发写操作 部分支持单线程写和并发读操作 同时.NET4添加了大量并发集合 首先介绍常见的泛型集合接口,其大部分都位于System.Collection.Generic命名空间。 IEnumerable<T>,其可以获取一个IEnumerator<T>迭代器,如果从数据库的角度来看,前者是表,后者是游标
用户1216676
2018/01/24
8810
重构一个繁琐的数据结构
    在GIX4项目的开发过程中,遇到一个比较复杂的数据结构。复杂,是因为它有许多限制条件。我的工作是在现有系统中,添加新的功能,并在过程中重构部分旧代码。 约束及需求     以下约束是系统中已经存在的必要的约束,不可绕开这些约束而进行代码的开发。 1.项目中,有许多的实体类,都含有一种多叉树的关系和逻辑。 2.这些实体的树型关系,在运行时,只有键的关系,而没有对应的实体引用关系。     由于GIX4是数据分析软件,数据量比较大。建立关系需要的时间比较久,所以服务器端只负责给数据。这样客户端得到的
用户1172223
2018/01/26
8540
设计一个 .NET 可用的弱引用集合(可用来做缓存池使用)
我们有弱引用 WeakReference<T> 可以用来保存可被垃圾回收的对象,也有可以保存键值对的 ConditionalWeakTable。
walterlv
2023/10/22
2390
通过运行期类型检查实现泛型算法
虽然我们可以通过指定不同的类型参数来实现泛型类的复用,但是在某些情况下通用就意味着我们无法利用具体类型的优势。针对这一点 C# 允许在发现类型参数所表示的对象具有更多的功能时编写更具体的代码。这一点是利用了泛型依据对象的编译器类型来进行实例化的这一特点,如果我们在开发时没有想到这一点就有很大的可能降低程序的性能。为了能讲清楚这一点,我们先来看一段代码,这段代码要做的是倒序输出序列中的内容。
喵叔
2020/09/08
7140
.NET面试题系列[10] - IEnumerable的派生类
IEnumerable分为两个版本:泛型的和非泛型的。IEnumerable只有一个方法GetEnumerator。如果你只需要数据而不打算修改它,不打算为集合插入或删除任何成员(例如从远端拿回数据显示),则你不需要任何比IEnumerable更复杂的接口。
s055523
2018/09/14
9450
.NET面试题系列[10] - IEnumerable的派生类
C#泛型方法解析
本文讲解了C# 2.0引入的泛型知识,主要包含泛型类、泛型接口、泛型委托,并且重点讲解了泛型方法,已经泛型的约束分类。最后给了一些利用泛型方法操作xml的方法。
彭泽0902
2018/01/04
3.8K0
【深入浅出C#】章节 5: 高级面向对象编程:接口和抽象类
面向对象编程(OOP)是一种软件开发的编程范式,它以对象作为程序的基本单位,通过封装、继承和多态等概念来组织和管理代码。核心概念包括类、对象、封装、继承和多态。 接口和抽象类是面向对象编程中的两个重要概念。它们都具有高度的抽象性和可扩展性,能够帮助我们设计和构建灵活、可维护的代码。接口定义了一组方法和属性的契约,用于描述对象的行为。它提供了一种标准化的方式,使得不同的类可以共享相同的行为,实现了代码的解耦和可替换性。 接口的重要性在于促进了代码的模块化和代码的重用,同时提供了灵活的设计和扩展能力。 抽象类是一种具有部分实现和部分抽象成员的类。它提供了一种基础框架,用于派生具体类。抽象类的重要性在于它定义了类之间的通用行为和属性,并且通过强制派生类实现抽象方法,确保了派生类的一致性。抽象类可以作为模板和基类,提供了代码的重用和继承的能力。 接口和抽象类的作用是提供了一种抽象层级的设计和编码方式,使得代码更加灵活、可扩展和可维护。它们促进了代码的模块化和重用,降低了代码的耦合度,同时也提供了良好的设计和扩展能力。对于大型项目和复杂系统的开发,接口和抽象类是非常重要的工具,能够帮助我们构建高质量的软件。
喵叔
2023/07/21
7130
C# .NET面试系列二:面向对象
构造函数(Constructor)是一种特殊类型的方法,它在创建类的实例(对象)时被调用,用于初始化对象的状态。构造函数的名称必须与包含它的类的名称相同,并且没有返回类型。
GoodTime
2024/03/07
5063
C# .NET面试系列二:面向对象
相关推荐
C#语言各种集合介绍
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档