C#基础精华03(常用类库StringBuilder,List<T>泛型集合,Dictionary<K , V> 键值对集合,装箱拆箱)
常用类库StringBuilder
StringBuilder高效的字符串操作
当大量进行字符串操作的时候,比如,很多次的字符串的拼接操作。
String 对象是不可变的。 每次使用 System. String 类中的一个方法时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。 在需要对字符串执行重复修改的情况下,与创建新的 String 对象相关的系统开销可能会非常大。 如果要修改字符串而不创建新的对象,则可以使用 System.Text. StringBuilder 类。 例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder 类可以提升性能。
StringBuilder != String//将StringBuilder转换为String.用ToString();
StringBuilder仅仅是拼接字符串的工具,大多数情况下还需要把StringBuilder转换为String.
StringBuilder sb = new StringBuilder();
sb.Append();//追加字符串
sb.ToString();//把StringBuilder转换为字符串。
sb.Insert();
sb.Replace();
List<T>泛型集合
List<T>是C#中一种快捷、易于使用的泛型集合类型,使用泛型编程为编写面向对象程序增加了极大的效率和灵活性。
1、List<T>用法
List<T> list = new List<T>();// T 为列表中元素的类型 List<string> mlist = new List<string>();//创建了一个 string 类型的集合
string[] strArr ={"1","2","3","4","5"};
List<string> strList =List<string>(strArr);//把数组作为参数新建一个string类型集合
2、添加元素到List<T>
strList.Add("Hello");//把一个字符串添加到strList集合中
string[] strArr ={"1","2","3","4","5"};
strList.AddRange(strArr);//把数组添加到集合中,数组也可以理解为一个有限长度的集合
Insert(int index, T item);//index 为要添加元素的位置
strList.Insert(1,"萨瓦迪卡");//在集合中第1个元素后面的位置插入一个元素
3、泛型集合的遍历
foreach(string s in strList)
{
Console.WriteLine(s);//输出遍历到的元素的值
}
Dictionary<K , V> 键值对集合
//新建一个键是int类型 ,值是 string类型的键值对集合
Dictionary<int,string> dictionary =newDictionary<int,string>();
//注意:这里的键可以是声明类型的范围的任意值,不必按照顺序,会跟stirng类型的值相对应
dictionary.Add(1,"张三");
dictionary.Add(21,"李四");
dictionary.Add(33,"王五");
dictionary.Add(4,"赵六");
foreach(KeyValuePair<int,string> kvp in dictionary)
{
//输出遍历到的键值对集合元素的键和值
Console.WriteLine("key={0},value={1}", kvp.Key, kvp.Value);
}
foreach(int j in dictionary.Keys)
{
//输出遍历到的键值对元素的键
Console.WriteLine("key={0},value={1}", j, dictionary[j]);
}
//遍历Values
foreach(string item in dictionary.Values)
{
//输出遍历到的Values(值)
Console.WriteLine("value:{0}", item);
}
//判断是否包含 2 这个键,返回bool类型,true则包含
if(dictionary.ContainsKey(2))
{
//输出这个键所对应的值
Console.WriteLine(dict[2]);
}
1.装箱、拆箱必须是: 值类型→引用类型 或 引用类型→值类型。
object,接口。值类型是可以实现接口。
Person p=new Student();//这个叫隐式类型转换,不叫装箱。
Student stu=(Student)p;//这个叫显示类型转换,不叫拆箱。
int类型为什么能装箱到object类型,但不能装箱到string类型或Person类型,
因为object类型是int类型的父类。
2.拆箱时,必须用装箱时的类型来拆箱
装箱时如果是int,拆箱必须用int,不能用double 3.方法重载时,如果具有该类型的重载,那么就不叫拆箱或装箱。
int n=10; Console.WriteLine(n);//没有发生装箱,因为方法重载。 ==============================
1.以下代码进行了几次装箱?(3次装箱,1次拆箱,注意数字与字符串相加,最终调用的是string.Contact())
int n = 10;
object o = n;
n = 100;
Console.WriteLine(n + "," + (int)o);
Console.ReadKey();
//通过Reflector查看,并说明为什么?
C#基础精华03(常用类库StringBuilder,List<T>泛型集合,Dictionary<K , V> 键值对集合,装箱拆箱)的更多相关文章
- Java常用类__装箱/拆箱
以下是常用的各两种方法(各类提供了构造方法,静态方法) 一.基本数据类型 转化为 包装类(装箱) 例:int i=10: Integer num=i;//num=10 二.包装类 转化为 基本数据类 ...
- JavaScript DOM编程基础精华03(动态设置,层的操作,性能问题)
代码是否需要放置到onload中 //如果js代码需要操作页面上的元素,则将该代码放到onload里面. //因为当页面加载完毕之后页面上才会有相关的元素 //如果js代码中没有操作 ...
- 常用类库StringBuilder
1.使用StringBuilder拼接字符串实例: string[] lines = File.ReadAllLines("sdjk.txt", Encoding.Default) ...
- jQuery编程基础精华03(RadioButton操作,事件,鼠标)
RadioButton操作 取得RadioButton的选中值,被选中的radio只有一个值,所以直接用val() $('#btn1').click(function () { ...
- JavaScript基础精华03(String对象,Array对象,循环遍历数组,JS中的Dictionary,Array的简化声明)
String对象(*) length属性:获取字符串的字符个数.(无论中文字符还是英文字符都算1个字符.) charAt(index)方法:获取指定索引位置的字符.(索引从0开始) indexOf(‘ ...
- .NET 内存基础(通过内存体验类型、传参、及装箱拆箱)
该随笔受启发于<CLR Via C#(第三版)>第四章4.4运行时的相互联系 一.内存分配的几个区域 1.线程栈 局部变量的值类型 和 局部变量中引用类型的指针(或称引用)会被分配到该区域 ...
- 基础才是重中之重~Dictionary<K,V>里V的设计决定的性能
回到目录 字典对象Dictionary<K,V>我们经常会用到,而在大数据环境下,字典使用不当可能引起性能问题,严重的可能引起内在的溢出! 字典的值建议为简单类型,反正使用Tuple< ...
- C#基础复习(2) 之 装箱拆箱
参考资料 [1] @只增笑耳Jason的回答 https://www.zhihu.com/question/57208269 [2] <C# 捷径教程> 疑难解答 装箱和拆箱是什么? 何时 ...
- Java 基础巩固:装箱拆箱 你真的熟悉吗
先考两道题: Integer a1 = 300; Integer a2 =300; System.out.print(a1 == a2); Integer b1 = 1; Integer b2 = 1 ...
随机推荐
- 动态链接库加载出错:cannot restore segment prot after reloc: Permission denied
在执行可执行程序时,出现动态链接库加载出错:cannot restore segment prot after reloc: Permission denied. 主要是由于Linux 内核中提供的强 ...
- Brackets - 又一款牛x的WEB开发编辑器
Brackets官网下载: http://brackets.io/ Adobe Brackets是由Adobe主导开发一款主打web开发的编辑器. 是继TextMate,Sublime Text这两个 ...
- coreseek安装使用
本文引自:http://www.phperz.com/article/14/0615/95.html sphinx的安装使用,其实都是大同小异,以下以 coreseek安装为例Coreseek 是一款 ...
- 一些dos命令
MS DOS 命令大全 一.基础命令 1 dir 无参数:查看当前所在目录的文件和文件夹. /s:查看当前目录已经其所有子目录的文件和文件夹. /a:查看包括隐含文件的所有文件. /ah:只显示出隐含 ...
- js-shortid:优雅简洁地实现短ID
短ID在实际运用中很广泛, 其中比较典型的运用就是短地址. 市面上肯定有不少开源的生成短ID库, 基于node.js的估计也不少. 鉴于本人已然是node.js的脑残粉(本职java开发), 很多业余 ...
- 用phpmailer发邮件 中文乱码问题解决
加入如下代码解决. $mail->CharSet = "GB2312"; //utf-8; $mail->Encoding = "base64"; ...
- http返回状态代码及含义
“100″ : Continue(继续) 初始的请求已经接受,客户应当继续发送请求的其余部分.(HTTP 1.1新) “101″ : Switching Protocols(切换协议) 请求者已要求服 ...
- Delphi通过Map文件查找内存地址出错代码所在行
一 什么是MAP文件 什么是 MAP 文件?简单地讲, MAP 文件是程序的全局符号.源文件和代码行号信息的唯一的文本表示方法,它可以在任何地方.任何时候使用,不需要有额外的程序进行支持.而且,这是唯 ...
- 1006. Sign In and Sign Out
#include <stdio.h> #include <algorithm> #include <iostream> #include <string.h& ...
- 去掉代码中自动生成的TODO Auto-generated method stub
Window --> Preferences -->Java -->Code Style -->Code Templates--> Code --> Method ...