请教一个在 ArrayList中存储的类型选择的问题!
书上说 "arraylist中存储的类型为object类型的 ",也即引用型的,书上还说 "struct类型的值变量由于不需要独立的引用变量,在某些情况下使用更少的内存 "
现在我打算作一个数据采集程序,采集的数据准备放在ArrayList中存储,每个数据单元现在有两种方式,声明为 "引用型class "或者 "值类型struct ",数据量还是比较多的,而且后期要对arraylist中的数据项进行频繁的读取操作!
现在我就不知道该如何声明这个数据项,是该声明为class还是struct,我不知道该如何选择!!
请各位帮帮忙,给我讲讲该如何作,原因怎样!!
小弟谢谢各位了
------解决方案--------------------应该用class,
------解决方案--------------------用class 吧!
如果数据量大,还是存在文件或是数据库吧!
------解决方案--------------------使用class自己容易控制,而且可以判断类型
------解决方案--------------------建议用class。请参照:
http://book.csdn.net/bookfiles/295/10029512573.shtml
-----------------------------
Effective C#中文版:改善C#程序的50种方法
条款6:明辨值类型和引用类型的使用场合
-----------------------------
一般而言,我们创建的引用类型总是要比值类型多。如果以下问题的答案都为Yes,那我们就应该创建值类型。
1. 该类型的主要职责是否用于数据存储?
2. 该类型的公有接口是否完全由一些数据成员存取属性定义?
3. 是否确信该类型永远不可能有子类?
4. 是否确信该类型永远不可能具有多态行为?
综上所述,我们应该将用于底层数据存储的类型设计为值类型,将用于定义应用程序行为的类型设计为引用类型。这样一来,我们既获得了从类对象内复制数据的安全性,也获得了基于栈的和内联方式的存储模型所带来的内存优势,同时还能利用标准的面向对象技术来创建应用程序的逻辑。如果对类型将来的应用情况不确定,那就应该使用引用类型。
------解决方案--------------------ArrayList存储的都是Object是对的,所以不管什么类型,存到Arraylist里都会经过一个叫做装箱的过程,然后存到里面。取出来的时候,转换成实际类型,还要拆箱。这两个步骤是非常慢的,特别是数据量大。
如果你是.Net2.0,还是用泛型吧,用这个类型List <T> ,跟ArrayList一样,但不用装箱,T就是里面要存储的信息的类型。
如果数据量大还是用class吧,毕竟struct是存在与堆栈上的,万一 一push,溢出可就惨了。
------解决方案--------------------用list <T>