黑马程序员_学习日记39_604基础加强(垃圾回收、弱引用、集合ArrayList和Hashtable、泛型集合List和Dictionary、var)

22 篇文章 0 订阅

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、 泛型集合(ListDictionary

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有没有初始化器?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值