黑马程序员_学习日记39_604基础加强(垃圾回收、弱引用、集合ArrayList和Hashtable、泛型集合List和Dictionary、var)
2012-06-06 14:56
736 查看
string s1 = “aaa”; //C#语法
String s2 = “bbb”;
int i1 = 10; //C#语法
Int32 i2 = 20;
1、
垃圾回收
目的:提高内存利用率
垃圾回收器:只回收托管堆中的内存资源,不回收其他资源(数据库连接、文件句柄、网络端口等)
什么样的对象才会被回收?
没有变量引用的对象。例:
Person p = new Person();
p.Age = 10;
Person p1 = new Person();
p = p1; //当执行完这句话,p对象已经没有任何变量指向了,可以被收回
什么时间回收?
不确定,当程序需要新内存的时候开始执行回收。
GC.Collect(); //手动调用垃圾回收器。不建议使用,垃圾回收有一系列的算法,需要移动对象等等,这时会暂停一下(非常短暂)应用程序,让程序自动去GC
垃圾回收器中“代”的概念:(共3代)垃圾回收采用代的概念,避免了每次垃圾回收都遍历所有的对象,减少了垃圾回收的时间。
第0代一开始创建的所有对象都是第0代
第0代回收频率最高,2代存活率最高
Dispose()释放除内存外的其他资源
析构函数在C#中叫Finalize()函数,在当前对象被垃圾回收之前会调用Finalize()。不能手动调用。既然Dispose()已经释放了其他内存,就不需要调用Finalize()了。
2、 弱引用:实例化对象占用内存较大、耗时较多的时候用
Person p = new Person();
p.Age = 18;
WeakReference wk =new WeakReference(p);
p = null; //当执行完这句话的时候,垃圾回收可以回收p对象,没回收通过弱引用就可以访问到p
object pnew = wk.Target;
if(pnew != null)
{
Console.WriteLine(((person)pnew).Age);
}
else
{
Console.WriteLine(“对象已经被回收!!!”);
}
3、 集合类之ArrayList(增、删、查、改、遍历)
3.1数组特点:类型统一、长度固定
3.2集合常用操作:添加、遍历、移除
3.3命名空间:System.Collections
3.4ArrayList
ArrayListarrList = new ArrayList();
//获取集合中实际存储的数据个数,类似于数组的Length
Console.WriteLine(arrList.Count);
arrList.Add(10);
arrList.Add(“yzk”);
arrList.Add(9.9);
arrList.RemoveAt(0);
3.4.1属性:
Count 表示实际的元素个数
Capacity表示当前集合的容量
3.4.2方法:
Contains()判断是否包含某值
TrimToSize()将总容量变成实际容量
AddRange()将数组直接增加到集合中
ToArray()将集合转为数组
4、
Hashtable
4.1比较各种查询方法的效率
遍历查询、计算查询
键的地址是算出来的,不是遍历查询的,所以效率高
4.2根据键取值
Hashtable hash = new Hashtable();
Person ac = new Person(){Name = “安超”};
hash.Add(ac.Name,ac);
Person hsd = new Person(){Name = “何圣东”};
hash.Add(hsd.Name,hsd);
Console.WriteLine(((Person)hash[“安超”]).Name);
Console.ReadKey();
4.3遍历Hashtable
Hashtable table = new Hashtable();
table.Add(“ac”,”anchao”);
table.Add(“hsd”,”heshengdong”);
table.Add(“ylr”,”yanglianren”);
foreach(DictionaryEntry item in table)
{
Console.WriteLine(item.Key+” ”+item.Value);
}
//单独遍历键
foreach(var item in table.Keys)
{
Console.WriteLine(item);
}
//单独遍历值
foreach(var item in table.Values)
{
Console.WriteLine(item);
}
5、
泛型集合(List、Dictionary)
5.1通过泛型可以限定集合中存储的数据类型
list.ToArray()
返回值类型变成了特定类型数组
5.2Dictionary
遍历:
5.2.1遍历键
foreach(Person item in dict.Keys)
{
Console.WriteLine(item);
}
5.2.2遍历值
foreach(string item in dict .Values)
{
Console.WriteLine(item);
}
5.2.3同时遍历键和值
foreach(KeyValuePair<Person,string>kv in dict)
{
Console.WriteLine(“键:{0},值:{1}”,kv.Key,kv.Value);
}
6、 C#中的关键字var
是一个类型推断,在程序编译的时候就已经替换成了对应的数据类型,是强类型。
作业:中英文转换、火星文翻译
思考:Dictionary有没有初始化器?
String s2 = “bbb”;
int i1 = 10; //C#语法
Int32 i2 = 20;
1、
垃圾回收
目的:提高内存利用率
垃圾回收器:只回收托管堆中的内存资源,不回收其他资源(数据库连接、文件句柄、网络端口等)
什么样的对象才会被回收?
没有变量引用的对象。例:
Person p = new Person();
p.Age = 10;
Person p1 = new Person();
p = p1; //当执行完这句话,p对象已经没有任何变量指向了,可以被收回
什么时间回收?
不确定,当程序需要新内存的时候开始执行回收。
GC.Collect(); //手动调用垃圾回收器。不建议使用,垃圾回收有一系列的算法,需要移动对象等等,这时会暂停一下(非常短暂)应用程序,让程序自动去GC
垃圾回收器中“代”的概念:(共3代)垃圾回收采用代的概念,避免了每次垃圾回收都遍历所有的对象,减少了垃圾回收的时间。
第0代一开始创建的所有对象都是第0代
第0代回收频率最高,2代存活率最高
Dispose()释放除内存外的其他资源
析构函数在C#中叫Finalize()函数,在当前对象被垃圾回收之前会调用Finalize()。不能手动调用。既然Dispose()已经释放了其他内存,就不需要调用Finalize()了。
2、 弱引用:实例化对象占用内存较大、耗时较多的时候用
Person p = new Person();
p.Age = 18;
WeakReference wk =new WeakReference(p);
p = null; //当执行完这句话的时候,垃圾回收可以回收p对象,没回收通过弱引用就可以访问到p
object pnew = wk.Target;
if(pnew != null)
{
Console.WriteLine(((person)pnew).Age);
}
else
{
Console.WriteLine(“对象已经被回收!!!”);
}
3、 集合类之ArrayList(增、删、查、改、遍历)
3.1数组特点:类型统一、长度固定
3.2集合常用操作:添加、遍历、移除
3.3命名空间:System.Collections
3.4ArrayList
ArrayListarrList = new ArrayList();
//获取集合中实际存储的数据个数,类似于数组的Length
Console.WriteLine(arrList.Count);
arrList.Add(10);
arrList.Add(“yzk”);
arrList.Add(9.9);
arrList.RemoveAt(0);
3.4.1属性:
Count 表示实际的元素个数
Capacity表示当前集合的容量
3.4.2方法:
Contains()判断是否包含某值
TrimToSize()将总容量变成实际容量
AddRange()将数组直接增加到集合中
ToArray()将集合转为数组
4、
Hashtable
4.1比较各种查询方法的效率
遍历查询、计算查询
键的地址是算出来的,不是遍历查询的,所以效率高
4.2根据键取值
Hashtable hash = new Hashtable();
Person ac = new Person(){Name = “安超”};
hash.Add(ac.Name,ac);
Person hsd = new Person(){Name = “何圣东”};
hash.Add(hsd.Name,hsd);
Console.WriteLine(((Person)hash[“安超”]).Name);
Console.ReadKey();
4.3遍历Hashtable
Hashtable table = new Hashtable();
table.Add(“ac”,”anchao”);
table.Add(“hsd”,”heshengdong”);
table.Add(“ylr”,”yanglianren”);
foreach(DictionaryEntry item in table)
{
Console.WriteLine(item.Key+” ”+item.Value);
}
//单独遍历键
foreach(var item in table.Keys)
{
Console.WriteLine(item);
}
//单独遍历值
foreach(var item in table.Values)
{
Console.WriteLine(item);
}
5、
泛型集合(List、Dictionary)
5.1通过泛型可以限定集合中存储的数据类型
list.ToArray()
返回值类型变成了特定类型数组
5.2Dictionary
遍历:
5.2.1遍历键
foreach(Person item in dict.Keys)
{
Console.WriteLine(item);
}
5.2.2遍历值
foreach(string item in dict .Values)
{
Console.WriteLine(item);
}
5.2.3同时遍历键和值
foreach(KeyValuePair<Person,string>kv in dict)
{
Console.WriteLine(“键:{0},值:{1}”,kv.Key,kv.Value);
}
6、 C#中的关键字var
是一个类型推断,在程序编译的时候就已经替换成了对应的数据类型,是强类型。
作业:中英文转换、火星文翻译
思考:Dictionary有没有初始化器?
相关文章推荐
- 黑马程序员--集合框架知识总结和泛型--java学习日记7(基础知识)
- 黑马程序员--Java基础学习笔记【集合-List、泛型】
- 黑马程序员_学习日记十六_基础加强之泛型、类加载器
- 黑马程序员_学习日记23_C#基础知识补充(StringBuilder、ArrayList、HashTable)
- 黑马程序员_学习日记37_601基础加强(enums_truct_类型转换_值类型与引用类型_异常处理_函数返回值)
- 黑马程序员_学习日记40_605基础加强(自定义泛型、装拆箱、foreach、文件操作、字符串与byte数组转换)
- 2012.6.4 ArrayList集合 List泛型 Hashtable键值对的集合 Dictionary
- 黑马程序员java学习<基础加强>—泛型
- 黑马程序员_学习日记34_528基础加强(面向对象)
- C#集合的區別(Array、Arraylist、 List、 Hashtable、SortedList、 Dictionary、 Stack、 Queue )
- 黑马程序员Java基础加强9-16学习日记
- 黑马程序员————学习日记【17】 【基础加强1】
- 黑马程序员————学习日记【19】 【基础加强3】
- C#集合类(Array、Arraylist、List、Hashtable、Dictionary、Stack、Queue)
- C#使用集合组织数据(HashTable、ArrayList、List<T>,Dictionary<K,V>
- Java基础第十四天学习日记_集合、List集合、Set集合
- 黑马程序员——基础学习日记(集合)
- 黑马程序员_日记39_ArrayList字符串集合去重
- Hashtable, ArrayList, List, Dictionary学习
- [C#]泛型与非泛型集合类的区别及使用例程,包括ArrayList,Hashtable,List<T>,Dictionary<Tkey,Tvalue>,SortedList<Tkey,Tvalue>,