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 ...
随机推荐
- boost::xml——基本操作以及中文乱码解决方案
下面是本人使用boost库的xml部分的基础操作,并且解决对于大家使用boost库读写中文xml内容出现的乱码问题. 1.实现boost库xml基本操作2.解决boost对xml中中文乱码问题3.实现 ...
- DEDECMS中,引入文件
引入文件:dede:include 标签:{dede:include filename="foot.htm"/}
- c#中的枚举
1.枚举概念:枚举是用户定义的整型类型,在声明一个枚举时,要指定该枚举的实例可以包含的一组可接受的值,还可以给值指定易于记忆的名称.如果在代码的某个地方,要试图把一个不可接受范围内的值赋予枚举的一个实 ...
- Div 内部所有元素 全部垂直对齐
http://stackoverflow.com/questions/7273338/how-to-vertically-align-an-image-inside-div How it works: ...
- linux之cat命令
1. cat 接普通文件名,会把文件内容打印到屏幕:2. cat > file,这个可以向文件“file”写入内容,最后按 Ctrl + D 结束输入,会将你输入的数据保存到文件. cat主要有 ...
- Java语法糖
1.创建数组:String[] s = new String[]{"1","2","3"};//这种方法可以在不指定数组元素数量的情况下生成 ...
- 我用的一些Node.js开发工具、开发包、框架等总结
开发工具 1.WebStorm,毫无疑问非他莫属,跨平台,强大的代码提示,支持Nodejs调试,此外还支持vi编辑模式,这点我很喜欢. 2.做些小型项目用Sublime Text. 3.Browser ...
- VB6-AppendToLog 通过API写入日志
工作中免不了需要为自己的程序添加日志,我也从网上扒拉了一个老外写的模块,修改修改了下,凑合用吧. Option Explicit '********************************** ...
- unity3d KeyCode各键值说明
KeyCode :KeyCode是由Event.keyCode返回的.这些直接映射到键盘上的物理键. http://docs.unity3d.com/ScriptReference/KeyCode.h ...
- WPF中利用后台代码实现窗口分栏动态改变
在WPF中实现窗口分栏并能够通过鼠标改变大小已经非常容易,例如将一个GRID分成竖排三栏显示,就可以将GRID先分成5列,其中两个固定列放GridSplitter. <Grid Backgrou ...