C# List与 ArrayList用法与区别

  • 格式:docx
  • 大小:18.87 KB
  • 文档页数:5

C# List与ArrayList用法与区别问题:请举例讲下List<>的用法?来个简单的例子。

谢谢比如我用List<int>test =new List<int>();那么实例test中的所有方法的类型就是int吗?答案:一般的如果要返回一个集合数组会用到他。

他增加了代码的可读性,通过他,前台编码的人就可以不费很大力气了解到这个字段什么意思。

比如声明了一个Users实体类public Calss Users{public string Name;public int Age;}这个只是代表一个用户的对象信息,如果你获取的是个用户列表的化,就可以用List<Users> usersList = new List<Users>;然后向列表里添加每个用户信息Users users = new Users(); = "ssss";users.Age = "12";userList.add(users);这样循环的向列表里添加信息,然后返回这个列表,在前台页面就可以用循环读出这些信息。

这个是2.0的新特征泛型,用泛型可以解决装箱拆箱问题,List<int>test =new List<int>()这样定义,test这个集合就只能放进了int数据,因此取出的时候不用(int)test[i]显式转换了。

命名空间:using System.Collections;class Program{//做个比较static void Main(string[] args){//new对象Cls a1 = new Cls();Cls a2 = new Cls();//存放对象List<Cls> testfanxing = new List<Cls>();testfanxing.Add(a1);ArrayList testarray = new ArrayList();testarray.Add(a2);//取对象Cls b1 = testfanxing[0];Cls b2 = testarray[0];//这句报错!改为:Cls b2 = (Cls)testarray[0];就可正常通过,但是用了类型强制转换//泛型啥好处?//1。

避免了强制类型转换而造成代码可读性差。

//2。

既然有了类型强制转换,问题来了:类型强制转换可能会用到装箱和拆箱过程,耗时。

//3。

再由于有强制类型转换,在编译的时候可能不会包错,但是运行代码的时候有可能会因为转换失败而出现错误。

这就是我们说的非安全代码。

}}class Cls{ }简单来说,泛型就是限制了操作类型。

用微软的话讲:“添加到ArrayList 中的任何引用或值类型都将隐式地向上强制转换为Object。

如果项是值类型,则必须在将其添加到列表中时进行装箱操作,在检索时进行取消装箱操作。

强制转换以及装箱和取消装箱操作都会降低性能;在必须对大型集合进行循环访问的情况下,装箱和取消装箱的影响非常明显。

”另外一个list用法实例:C#里List的用法主程序代码:static void Main(string[] args){ClassList listClass = new ClassList();Console.WriteLine("请输入第个字符串");string a = Console.ReadLine();Console.WriteLine("请输入第二个字符串");string b = Console.ReadLine();foreach (string n in listClass.strList(a, b)){Console.WriteLine(n);}类:class ClassList{public List<string> strList(string str1,string str2){string stra = str1 + str2;string strb = str2 + str1;string strc = str1 + str1;List<string> listStr = new List<string>();listStr.Add(stra);listStr.Add(strb);listStr.Add(strc);return listStr;}}输出:abbaaa关于struct实例List 类是ArrayList 类的泛型等效类,某些情况下,用它比用数组和ArrayList 都方便。

我们假设有一组数据,其中每一项数据都是一个结构。

public struct Item{public int Id;public string DisplayText;}注意结构是不能给实例字段赋值的,即public int Id = 1 是错误的。

using System.Collections.Generic;List<Item> items = new List<Item>();//添加Item item1 = new Item();item1.Id = 0;item1.DisplayText = "水星";items.Add(item1);//添加Item item2 = new Item();item2.Id = 1;item2.DisplayText = "地球";items.Add(item2);//修改//这里使用的是结构,故不能直接用items[1].DisplayText = "金星";,如果Item 是类,则可以直接用。

为什么呢?因为结构是按值传递的。

Item item = items[1];item.DisplayText = "金星";items[1] = item;List和ArrayList的区别List是一个接口,而ListArray是一个类。

ListArray继承并实现了List。

所以List不能被构造,但可以向上面那样为List创建一个引用,而ListArray就可以被构造。

List list; //正确list=null;List list=new List(); // 是错误的用法List list = new ArrayList();这句创建了一个ArrayList的对象后把上溯到了List。

此时它是一个List 对象了,有些ArrayList有但是List没有的属性和方法,它就不能再用了。

而ArrayList list=new ArrayList();创建一对象则保留了ArrayList的所有属性。

这是一个例子:import java.util.*;public class TestList{public static void main(String[] args){List list = new ArrayList();ArrayList arrayList = new ArrayList();list.trimToSize(); //错误,没有该方法。

arrayList.trimToSize(); //ArrayList里有该方法。

}}编译一下就知道结果了。

如果这个样子:List a=new ArrayList();则a拥有List与ArrayList的所有属性和方法,不会减少如果List与ArrayList中有相同的属性(如int i),有相同的方法(如void f()),则a.i是调用了List中的ia.f()是调用了ArrayList中的f();---------------------------------------------------------------问题的关键:为什么要用List list = new ArrayList() ,而不用ArrayList alist = new ArrayList()呢?问题就在于List有多个实现类,现在你用的是ArrayList,也许哪一天你需要换成其它的实现类,如LinkedList或者Vector等等,这时你只要改变这一行就行了:List list = new LinkedList(); 其它使用了list地方的代码根本不需要改动。

假设你开始用ArrayList alist = new ArrayList(), 这下你有的改了,特别是如果你使用了ArrayList特有的方法和属性。

地区用List arr = new ArrayList();定义;行业用ArrayListarr = new ArrayList();定义;则说明,行业里用到了ArrayList的特殊的方法.另外的例子就是,在类的方法中,如下声明:private void doMyAction(List list){}这样这个方法能处理所有实现了List接口的类,一定程度上实现了泛型函数.如果开发的时候觉得ArrayList,HashMap的性能不能满足你的需要,可以通过实现List,Map(或者Collection)来定制你的自定义类.。