手机版
网站地图
美文美图
最新动态
你好,欢迎访问
好美文阅读网
个性皮肤
搜索
网站首页
美文
文章
散文
日记
诗歌
小说
故事
句子
作文
签名
祝福语
情书
范文
读后感
文学百科
美文摘抄
节日文章
名家散文
网名大全
座右铭
口号大全
面试技巧
说说大全
阅读答案
诗词默写
流言蜚语
节日祝福
好句子
经典台词
谚语大全
亲情故事
友情故事
表白情书
工作报告
活动总结
心得体会
专题汇总
美文网首页
程序员
C#之数据结构(下)
C#之数据结构(下)
作者:
赤色黎明_9970
| 来源:发表于
2018-12-05 21:00 被阅读14次
哈希表:
Hashtable. (也叫散列表)无序.
哈希表(Hashtable) HashSet.
由一对(key , value) 类型的元素组成的集合.
所有元素的 key 必须唯一.
key ->value 是一对一的映射,即根据key就可以立刻在集合中找到所需元素.
Hashtable方法:
Add(key, value)
根据key而不是根据索引查找,因此速度很快
例子:
为哈希表追加不重复的100个值,且每个值都是1-100之间的随机数, 问哪个数字重复的次数最多,重复了多少次?
集合的迭代器
迭代器提供了对集合统一的遍历方案
foreach的本质:
注意:1.禁止在迭代中修改迭代变量!!!
2.禁止在迭代中修改集合!!!
数组和集合的比较:
1.数组声明了元素类型,但集合没有,因为集合中所用元素都存储为对象。
2.数组的大小是固定的,不能增加和减少;而集合类可根据需要动态调整大小
检索元素的方式不同。
装箱和拆箱:
1. 装箱在值类型向引用类型转换时发生
object obj = 1;这行语句将整型常量1赋给object类型的变量obj; 众所周知常量1是值类型,值类型是要放在栈上的,而object是引用类型,它需要放在堆上;要把值类型放在堆上就需要执行一次装箱操作。
以上就是装箱所要执行的操作了,执行装箱操作时不可避免的要在堆上申请内存空间,并将堆栈上的值类型数据复制到申请的堆内存空间上,这肯定是要消耗内存和cpu资源的。
2. 拆箱在引用类型向值类型转换时发生
object objValue = 4;
int value = (int)objValue;
上面的两行代码会执行一次装箱操作将整形数字常量4装箱成引用类型object变量objValue;然后又执行一次拆箱操作,将存储到堆上的引用变量objValue存储到局部整形值类型变量value中。
拆箱操作的执行过程和装箱操作过程正好相反,是将存储在堆上的引用类型值转换为值类型并给值类型变量。
装箱操作和拆箱操作是要额外耗费cpu和内存资源的,所以在c# 2.0之后引入了泛型来减少装箱操作和拆箱操作消耗。
泛型集合:
上面的情况是不带泛型的集合,我们可以看到,这种集合对象存储不易控制,类型转换容易出错。
下面的是带泛型的集合:
从上面两种情况我们可看出:
泛型集合可以约束集合内的元素类型.
编译时检查类型约束.
无需装箱拆箱操作.
加上using System.Collections.Generic;
List<T>,Dictionary<K,V> /<T>、<K,V>表示该泛型集合中的元素类型.
List<Student> students = new List<Student>();
利用List<Student>存储班级集合.
面试题:
请简述 ArrayList 和 List<Int>的主要区别:
1.ArrayList 不带泛型 数据类型丢失.
2.List<T> 带泛型 数据类型不丢失.
3.ArrayList需要装箱拆箱 List<T>不需要.
Dictionary<K,V>具有List<T>相同的特性
<K,V>约束集合中元素类型
编译时检查类型约束
无需装箱拆箱操作
与哈希表类似存储Key和Value的集合
泛型集合与传统集合相比类型更安全.
泛型集合无需装箱拆箱操作.
泛型的重要性:
1.解决了很多需要繁琐操作的问题.
2.提供了更好的类型安全性.
例子:
假定书籍的种类有5种,设计何种的数据结构可以达到快速查询某类所有书籍的功能(提示:用Dictionary<K,V>)
判断一篇英文文章出现了哪些字母,以及每个字母出现的个数
链表:
LinkedList<T>
生成和追加 LinkedList<string> linked = new LinkedList<string>();
linked.AddLast("cat");
linked.AddLast("dog");
linked.AddLast("man");
linked.AddFirst("first");
查找和插入 LinkedListNode<T>
LinkedListNode<string> node = linked.Find("one");
linked.AddAfter(node, "inserted");
例子:
集合的排序:
集合中全部为对象类型.
所以集合需要排序的时候则必须两个对象需要有可比性.
IComparable与IComparer接口
为了能够对数据项进行排序,就要确定两个数据项在列表中的相对顺序,也就是要确定两个对象的“大小”关系。一般来说,可以通过如下两种方式来定义大小关系。
第一种方式是针对对象本身。为了使对象自己能够执行比较操作,该对象必须实现IComparable接口,即至少具有一个CompareTo()成员。
System.IComparable接口中有如下方法:
int CompareTo(object obj);
它根据当前对象与要比较的对象的“大小”返回一个正数、0或一个负数。
第二种方式是提供一个外部比较器,能够比较对象的大小,并实现IComparer接口。
System.Collections.IComparer接口中有如下方法:
int Compare(object obj1, object obj2);
它根据第一个对象与第二个对象的“大小”返回一个正数、0或一个负数。
许多类在进行排序和查找时,都要求提供这样的外部比较器。
例子:
1.通过 IComparable 来进行排序
实现接口
2. 通过IComparer来进行排序
相关文章
网友评论
程序员
本文标题:
C#之数据结构(下)
本文链接:
https://www.haomeiwen.com/subject/hdgwcqtx.html
延伸阅读
那年盛夏诗歌
环境监察队工作总结范文
优秀教师学习心得范文
华胥引的读后感300字
《Its red》教学反思范文
农资购销的合同范本
竞选中队委优秀演讲稿
辞金蹈海的成语解释
《世纪宝鼎》公开课教案设计
因为爱你,所以牵挂
今生今世红尘醉——美到
一个90后的内心独白
致已逝去的高中年华
深度阅读
您也可以注册成为美文阅读网的作者,发表您的原创作品、分享您的心情!
情人节
母亲节
重阳节
清明节
端午节
植树节
元宵节
妇女节
愚人节
圣诞节
父亲节
教师节
儿童节
劳动节
青年节
建军节
万圣节
平安夜
光棍节
中秋节
国庆节
感恩节
腊八节
更多话题
栏目导航
程序员
摄影
故事
互联网
读书
旅行
热点阅读
藏在季节里的果香
幸福一家人👪
再见,陌生人
雪花飞舞
心理治疗小词典:自性
诗歌/
冬雨夜
生活是一堆烂摊子,但我不是
“乐清小男孩失踪”——背后
天庭里的童话都是假的(5)
程序员
开源 BI 工具 Metabase 简介
对象和引用
Python中list的实现
iOS 开发入门
领域驱动设计DDD和CQRS落地
字符编码的奥秘
传统 Ajax 已死,Fetch 永生
nodejs中异步
Web 服务器性能与站点访问性能优化思路
mysql & mongo aggregate
网友评论