导读:在机房重构的时候,为了降低耦合,不能返回DataTable型数据,而需要转换为泛型集合。我一直使用的就是IList,那天师傅过来帮我挑错,问我:你为什么一直写IList呢,不应该是List吗?好吧,然后,我才突然发现,我一直都写错了。不过,我真的错了吗?那么,它们之间又是什么关系呢?

一、基础概念

1,集合(ArrayList)

是Array的复杂版本,它提供了动态的增加和减少元素,实现了ICollection和IList接口,灵活的设置数组的大小等好处。

2,List

有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。

3,IList

IList 泛型接口是 ICollection 接口的子代,并且是所有非泛型列表的基接口。

二、联系

1,和数组

ArrayList、List从大的范围讲,它们都属于一种数组。

数组在创建时必须要指定数组变量的大小(如果定义的大小不合适,很容易出下标越界的情况,这点深有体会),还有在两个元素之间添加元素也比较困难。但ArrayList、List虽然从属于数组,但它们就完美的解决了数组存在的缺陷。

2,相互

List类是ArrayList类的泛型等效类。它们的使用大小可按需求动态添加数组实现IList接口。

三、区别

1,集合ArrayList和List

ArrayList:它的元素类型不确定,将所有的元素都认定为Object,所以,不管什么对象,都可以采用集合进行存储。但在取数据的时候,就会相对麻烦。

解决集合的缺陷:装箱(把值类型打包到Object引用类型的一个实例中)、拆箱(从对象中提取值类型)。

List:在功能上,与ArrayList无区别。但在声明和实例化时都需要指定其内部项的数据或对象类型。

总结:

元素类型:ArrayList不确定;List确定。                  注:功能无异

2,List和IList

List是一个具体的类,而IList是一个接口。List是IList的一种具体实现。

就比如在重构中,有IUser接口,也有它的实现类SQLUser。

总结:

创建方式不同: IList<string> Ilist1=new List<string>();List<string> list1=new List<string>()

使用方法的范围不同:使用IList创建时,仅可以使用它规定的且被实现的方法;相反,使用List时,可以使用List类中任何方法,包括IList所规定的。

举例:

比如在IUser接口中,规定了4个方法:User_Login,User_Add,User_Delete,User_Query,而在SQLUser类中,我仅仅实现了User_Login方法,但同时写入了一个User_ModifyPWD方法。那么,当我定义了一个接口IUser类时,我就仅仅只可以使用User_Login方法进行登录。而如果我定义一个SQLUser类时,我就可以同时使用User_Login和User_ModifyPWD两个方法。

四、知识总结

我在使用过程中,一直使用IList也没有问题的原因,我认为是因为我每次也都是创建了一个List的对象实例。

灵活性对比:Array〈ArrayList〈List

使用推荐:当我们仅仅只需要使用规定的方法时,就使用IList吧,使用接口创建实例可以降低耦合,对吧?

牛人说:当需要遍历数据或排序时,使用List,效率更高。(没有测试过)

五、个人感受

首先,我想说的是:师傅,你没错;我,也没错。不管是你说的使用List,还是我自己使用的IList,在这个程序中,都是可行的。

再者,我的信心就像是海浪一样,时而高,时而低,每次都来势汹汹。不过,我是不会放弃滴,我要一直磨,总能磨出来。师傅们,你们要相信我!

请大家多指教咯!

最新文章

  1. bzoj2002弹(dan)飞绵羊 分块水过
  2. MySQL concat函数的使用
  3. 简明python教程 --C++程序员的视角(一):数值类型、字符串、运算符和控制流
  4. Enterprise Solution 2.2 开发帮助文档集合
  5. VM虚拟机上 实现CentOS 6.X下部署LVS(DR)+keepalived实现高性能高可用负载均衡
  6. append与after
  7. JAVA泛型-擦除
  8. Regmon7.04绿色版(注册表变动实时监视工具)
  9. 使用minidom来处理XML的示例(Python 学习)(转载)
  10. Eclipse导入项目常见问题----facet版本问题04
  11. pgpool-II主备流复制的架设
  12. Apache shiro集群实现 (四)shiro授权(Authentication)--访问控制
  13. 作为新手在学习SSM+Easyui过程中遇到一系列问题
  14. Codeforces E - Connected Components?
  15. Centos配置jdk和tomcat环境
  16. String.format VS. StrSubstitutor VS. NamedParameterJdbcTemplate
  17. Serilog简介
  18. Lua 迭代器与closure
  19. Celery 框架学习笔记(生产者消费者模式)
  20. OpenERP|odoo Web开发

热门文章

  1. 编译运行第一个Java程序——通过示例学习Java编程3
  2. 利用js日期控件重构WEB功能
  3. Git和SVN的5个基本区别
  4. Python相关机器学习
  5. UIButton zoomin pressed
  6. Android(java)学习笔记148:网易新闻RSS客户端应用编写逻辑过程
  7. NLP.TM | GloVe模型及其Python实现
  8. Linux网卡设置为网桥模式
  9. UIScrollView和MultiThreading、UITextField、Keyboard
  10. 浅谈 Swift 2 中的 Objective-C 指针