您的位置:首页 > 职场人生

黑马程序员_学习日记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有没有初始化器?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐