在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()的!
#程序员# #编程# #编程语言#