在csharp(c#)中(不知java是否也一样),list有两个获取数组长度的方式,分别是list.count和list.count()。很多人有疑问,为什么会出现两个获取数组长度的方式?其实仔细看我们就知道,list.count是属性,list.count()是方法,它们的执行方式是不一样的!
list.count是集合在改变内容时赋值的,比如执行list.add()的时候,在count基础上加1,在执行list.remove()时,在count基础上减1,而count在源码中的值源自私有属性_size。
但list.count()就不一样了,采取的方式是直接循环集合内容,每获取到一个集合内容则将长度加1,最终返回数组的整个长度。
后者看起来显然是不效率的,但是为什么要这么做呢?原因其实很简单,那就是list.count是list的自有属性,而list.count()则源自enumerable。
几乎所有的集合类型都继承了ienumerable(包括icollection),但并不是所有集合类型都有类似list.add()或者list.remove()这样的方法。因此,list.count是list单独实现的!
比如说,有一些数组类型是可以先定义空间长度,再去定义数组内容的,此时如果使用count去获取它的长度,虽然可能能获取到,但是获取的只是数组的空间长度,所以意义并不大。因此,如果在csharp内,如果只定义了数组空间长度但是未给数组定义内容的话,是使用不了list.count这个属性的!
因此,从源码上来看,使用list.count在获取值的速度上不光优于list.count(),从某种角度说,它所代表的意义也是要大于list.count()的!
#程序员# #编程# #编程语言#