在CLR10中,要创建一个灵活的类或方法,但该类或方法在编译期间不知道使用什么类,就必须以Object类为基础。而Object类在编译期间没有类型安全性。因此必须进行强制类型转换。另外,给值类型使用Object类会有性能损失。
CLR20(Net
35
基于CLR20)提供了泛型。有了泛型,就不需要Objcet类。
SystemCollectionsGeneric命名空间中的List
泛型优点1:性能。
值类型存储在堆栈上,引用类型储存在堆上。
C#类是引用类型,结构是值类型。Net很容易把值类型转换为引用类型。所以可以在需要对象(对象是引用类型)的任意地方使用值类型。
例如:int可以赋予一个对象,从值类型转换为引用类型成为装箱,如果方法需要吧一个对象作为参数,而且传送了一个值类型。装箱 *** 作就会自动进行。另一方面,装箱的值类型可以使用拆箱 *** 作转换为值类型。在拆箱时,需要使用类型转换运算符。
装箱和拆箱 *** 作性能损失比较大。遍历许多项时尤其如此。
SystemCollectionsGenriec名称空间中的List<T>类不使用对象,而是在使用时定义类型。当List<T>的泛型类型定义为int,int类型在JIT编译器动态生成的类中使用,不再进行装箱和拆箱 *** 作
泛型优点2:类型安全
如果在ArrayList类中添加一个整数、一个字符串、一个MyClass类型的对象,如果这个集合使用Foreach语句迭代并转换为Int那么会出现异常。
在泛型类List<T>中,泛型类型T定义了允许使用的类型。有了List<int>的定义。就只能吧整数类型添加到集合中。
泛型优点3:二进制代码的重用。
泛型允许更好地重用二进制代码。泛型类定义一次,用许多不同的类型实例化。
泛型类型可以在一种语言中定义,在另一种Net
语言中使用。
泛型优点4:代码扩展。
字段类型为集合,建议采用泛型,如Set<User> 不采用泛型,如Set也是可以的,赋值与取值时注意类型转换即可。
字段类型为集合,对应数据库的列,最常见的情况就是多对多的关系,如用户、角色,他们之间有个关联表,关联表中有2个字段,都是指向其他表(用户表、角色表)的外键,那么在用户对象就有Set<Role>属性,在角色对象就有Set<User>属性。1对多的情况类似
你这要做的是一个模拟登录,注册,那么首先需要1个静态的容器,也就是存数据的地方,
建议单独建一个类,Data
里边一个静态变量
public static HashMap<String,User> users = new HashMap<String,User>();//Key为用户的名称,不能重复,User为用户对象,里边可以添加你需要模拟的属性
思路:
注册的时候,首先根据用户输入的用户名在users里去找有没有重复的Key,userscontainsKey()这个方法可以做到,如果有则不能用此用户名注册,否则可以继续填写资料,填写按成后,实例化一个User,将这个User的 userName作为key ,User作为value插入users这个map中,
登录的时候也是根据用户名去users中去找key,然后在匹配密码
public int 方法名(需要用到的实体层的类名 名字)
{
连接数据库
定义sqlconnention
定义int 类型的变量
定义sql语句
定义sqlcommand并将sql语句和连接对象传过去
打开连接
执行
变量名=sqlcommandExecuteNoQuary()
关闭连接
return 变量名
}
再在业务逻辑层中调用就可以了
在表示层掉用
既然你暗示就是ArrayList了,
首选就从Arraylist想了
可以试试:
import javautilArrayList;
public class Test{
public static void main(String[]args){
ArrayList<ArrayList<Integer>> als = new ArrayList<ArrayList<Integer>> ();
ArrayList<Integer> a1 = new ArrayList<Integer>();
ArrayList<Integer> a2 = new ArrayList<Integer>();
ArrayList<Integer> a3 = new ArrayList<Integer>();
ArrayList<Integer> a4 = new ArrayList<Integer>();
//下面是添加行,你可以用循环添加固定的行
//每一列就是一个ArrayList<Integer>,你可以任意添加,长度不固定吧
alsadd(a1);
alsadd(a2);
alsadd(a3);
alsadd(a4);
Systemoutprintln(alssize());
}
}
tao_3000的方法可行,只是Integer[]创建时要指定维数
可以自己写个算法自动增加维数
对于你说的数据量问题,个人理解是这样的:
达到了几十万几百万的数据量的时候,我想大概就是从数据库中吧数据读取出来,进行批量的处理或者更新之类的 *** 作。
你说得很对,如此庞大的数据量肯定会使效率降低,
但是我们完全可以一次从数据库中读取几百条记录,进行 *** 作
关于如何从数据库中一次读取很少的记录,jdbc和hibernate都有相应的实现
在者,数据量过大,呵呵,JVM可能崩溃哦 _
以上就是关于C#泛型如何提高性能的全部的内容,包括:C#泛型如何提高性能的、mysql数据库可以设计集合字段吗、java我是初学者,登录,注册两个类,用集合的泛型存注册的数据(姓名,密码),登录的时候怎么做啊等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)