A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© WENZISUN 中级黑马   /  2013-12-19 21:44  /  1321 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 WENZISUN 于 2013-12-20 21:17 编辑

list和数组的区别联系
foreach和for循环的区别联系

评分

参与人数 1技术分 +1 收起 理由
陈福军 + 1

查看全部评分

6 个回复

倒序浏览
大概是这样的哈:首先c#数组不是动态的,它的长度在定义时已经设定,是个固定的.所以在往一个数组中增加或要删除一个元素时,处理起来很麻烦.所以我们引入了非泛型集合ArraryList类 它可以动态的增加 删除元素 因为ArraryList是object类型,每次在增加删除或对数进行操作的时候,都要进行类型转换,非常耗用内存,所以我们又引入了泛型集合即List<> 它存储的类型是可以自己设置的,在<>里写上你要处理的数据类型,这样效率很高.
那foreach一般在集合中用到,它不可以控制循环的进度,而且是只读的,不可以在内部对元素进行修改,而for则可以控制进度也可以修改元素

评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

回复 使用道具 举报
1.数组的长度是固定而集合却是可变长的 。
2.数组要声明元素的类型,集合类的元素类型却是object.
3.数组要有整数下标才能访问特定的元素,然而很多时候这样的下标并不是很有用。集合也是数据列表却不使用下标访问


首先看下面代码:
string[] a=new string[]{"a","b"}

for(i=0;i<a.length;i++)
{
Response.write(a[i].ToString())
}


foreach(string b in a)
{
Response.write b
}
要知道
for语句格式:
for(初始化序列;每次循环前要验证的条件;每次循环结束后要执行的语句)
{
语句块
}
需要注意的是,以上三个参数都是可选的,理论上并不一定完全具备,但如果不设置循环条件,程序就会容易产生死循环



foreach是专门用来遍历数组和集合元素的
foreach语法格式:
foreach(类型 迭代变量 in 集合/数组)

语句块



同学、希望能帮助到你

评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

回复 使用道具 举报
list可以有泛型,数组没有,不便于规范化;
foreach(int line in lines)在不确定循环的次数,可以全部遍历一遍,动态性能比较好,for循环则不能,for循环需要知道循环的次数,在动态实现前提下不如foreach,个人建议最好多使用foreach在开发过程中,这样更规范和简便,传智播客视频中经常会讲到。

评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

回复 使用道具 举报
数组:在内存中是连续存储的,所以它的索引速度非常快,赋值与修改元素也很简单。
         但是在数组的数据间插入数据是很麻烦的,声明数组的时候必须指定数组的长度,数组的长度过长,会                      造成内存浪费,过短会造成数据溢出。  
ArrayList:ArrayList对象的大小是按照其中存储的数据来动态扩充与收缩的。克服了数组的缺点。
               ArrayList不是类型安全的。
因为ArrayList存在不安全类型与装箱拆箱的缺点,所以出现了泛型list

foreach用途专一,用来遍历,且不用知道循环次数,而for循环用处不止遍历,在遍历中需要知道循环次数

评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

回复 使用道具 举报
foreach 语句不需要下标就可以遍历数组中的元素,进行循环;for语句需要下标。

评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

回复 使用道具 举报
数组的容量是固定的,您只能一次获取或设置一个元素的值,而ArrayList或List<T>的容量可根据需要自动扩充、修改、删除或插入数据。
    数组可以具有多个维度,而 ArrayList或 List< T> 始终只具有一个维度。但是,您可以轻松创建数组列表或列表的列表。特定类型(Object 除外)的数组 的性能优于 ArrayList的性能。 这是因为 ArrayList的元素属于 Object 类型;所以在存储或检索值类型时通常发生装箱和取消装箱操作。不过,在不需要重新分配时(即最初的容量十分接近列表的最大容量),List< T> 的性能与同类型的数组十分相近。
foreach 用来遍厉实现IEroumable接口的集合 每次返回的就是这个集合中的一个元素 当然有的时候用for 也可以实现
for 是单纯的用来控制迭代的。你可以把foreach看成是for 的一个子集

举个例子:计算 1+2+...+100
可以用for 却不可以用foreach

评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马