淡定些,我上面说了它们应用上的区别,一开始我也觉着两者区别值和对象是没有意义的,但看了他们的说法,觉着还真有些不同,如: string[] a = new string[100]; // 初始化赋值 string x = a[2]; x = "...";List<string> a = new List<string>(); // 初始化赋值 string x = a[2]; x = "...."; 两种情况你测试一下a[2]的值是否会改变。第一中情况肯定不会变,我觉得第二中情况会变,我没测试,你自己测下吧。
数组的容量是固定的,您只能一次获取或设置一个元素的值,而List<T>的容量可根据需要自动扩充、修改、删除或插入数据。
数组可以具有多个维度,而 List< T> 始终只具有一个维度。但是,您可以轻松创建数组列表或列表的列表。特定类型(Object 除外)的数组 的性能优于List的性能。 这是因为 List的元素属于 Object 类型;所以在存储或检索值类型时通常发生装箱和取消装箱操作。不过,在不需要重新分配时(即最初的容量十分接近列表的最大容量),List< T> 的性能与同类型的数组十分相近。
string[]是 数组,定长,不可变
List<string> 是泛型 ,非定长,可变
List<string> 是泛型集合,如果你愿意,甚至可以自己写一个一模一样的类型。
List 感觉像python里面的列表
而List<>存放一个实体类可以使string,int或者自定义的
List<string> list=new List<string>();
string为你想要的对象,里面可以有属性,方法等,这就是面向对象。
而String[]只是存放值而已,不是对象
有什么不对可以指出来,何必言辞激进,有点素质行不,CSDN就是你们这些人整的
只是它能自动扩容。
因为string是引用类型,所以string[]和List<string>存储的都是string对象的引用(其实list内部也就是用数组实现的)。
2:数组效率高,list效率低。
总结:数组牺牲功能增加效率,list牺牲效率增加功能。
string[] a = new string[100];
// 初始化赋值
string x = a[2];
x = "...";List<string> a = new List<string>();
// 初始化赋值
string x = a[2];
x = "....";
两种情况你测试一下a[2]的值是否会改变。第一中情况肯定不会变,我觉得第二中情况会变,我没测试,你自己测下吧。
string[]数组里面是存放string型的值。int[]数组,也可以表述为存放的是int型的值, 你能指出哪里有问题吗?List<string>是存放string类型的对象。请注意他强调了对象,就好像List<obj>里面存放的都是obj对象。你又能说这有什么错误吗?楼上这样的说法,无非是为了让新人可以加深理解,浅显易懂。而你非要吹毛求疵。楼主提出的问题 是希望听听大家的归纳总结,而不是“放屁”。
int[]数组存储的是int型的值没错,因为int是值类型。但是,string是引用类型,string[]存储当然是string对象的引用,而不是string对象的值(或许string的不可变性,让你认为string也是值类型了吧)。同理,list也是一样的,因为list内部是用数组使用的,不相信的话,自己反编译看看吧
数组和List列表的唯一区别只有可扩容性。而事实上List<T>内部有个私有的T[]数组,当容量不足是自动扩容,创建新的T[]数组,旧的T[]数组内容复制过去。因此看似一个很方便使用的List<T>,如果定义的时候不给定一个合适的容量,使用的时候会影响性能,特别是数据量很大的时候。
是编译时耗时 还是运行时耗时
List<int>存放obj对象
在.NET里一切都是对象,都是Obj对象
就像各位大侠说的,一个定长,一个动态。
只要用在合适地方就done了。
如果你需要存放的参值或者其他确定的,那么就用string[],else就用List<string>。
如果你存放的是需要动态修改(增删改查)的,就用List<string>最好。但是string[]鄙人觉得可以完成该功能,只是需要转换思维便是了。
个人point,不代表真理。经供参考,请多多指教。
用起来其实很简单,定长的你就用数组,不定长的就用list
但是数组效率高,list会牺牲效率。
Sring[]不是固定长度。