一、列表
1、概念:ArrayList,可以看做是动态的数组。Add、Clear、Contains、Count、Remove、RemoveAt、ToArray(转换,再没关系)、索引器。
(1)ArrayList有一个非常重要的方法Add,作用是把一堆东西放到动态数组里。
(2)Clear是清空这个ArrayList。
(3)Count是计算ArrayList的长度。
(4)Remove是移除ArrayList中的某个元素,Remove后面的括号里写这个元素本身。
(5)RemoveAt是移除ArrayList中的某个元素,根据下标来移除,剩余的元素依次往前替补。例如移除掉第一个,那么原来的第二个元素就变成了第一个元素,原来的第三个变成第二个。
(6)Contains是判断指定的元素是否在ArrayList中,返回值是一个bool类型。
(7)下面的代码是打印list1的长度:
(8)下面的代码是通过索引来调:
(9)Add方法是每次加一个,AddRange方法是每次加多个。为什么能添加呢,因为数组都是从Array里继承的。
(10)例如:list1.AddRange(nums); //把nums数组添加到list1列表里。
以下代码是for遍历和foreach遍历:
看上面的截图,计算ArrayList的长度时,不是用length,而是用count。
2、C#中所有的数组类型int[]、string[]等都是继承自Array类。
3、这是一句列子:list1.AddRange(strs);
4、练习:有一个字符串是用空格分隔的一系列整数,写一个程序把其中的整数做如下重新排列打印出来:奇数显示在左侧、偶数显示在右侧。比如‘2 7 8 3 22 9’显示成‘7 3 9 2 8 22’。更牛X的解法:排序。
5、集合,ArrayList、HashSet、Hashtable、Dictionary等都可以叫做集合类。实现了IEnumerable(getEnumerator())、IEnumerable<T>的接口都可以使用foreach进行遍历。
二、泛型
6、用ArrayList的麻烦的地方:数据放进去就不知道是什么类型的了;不能防止非法类型数据的放入;将ArrayList返回给其他函数,会令调用者很困惑。要区分变量、返回值类型和实际对象类型的区别。IntArrayList,StringArrayList又没完没了。
7、我们需要泛型的ArrayList,所以就有了List<T>。List<int> 除此之外并无不同,<int>表示List中放的数据类型是int类型的,因为有声明类型时的约定,因此所有方法的参数、返回值都是确定类型的了。泛型的尖括号里可以放任何类型,枚举、接口、自定义的类、int、string等等都可以。
8、案例:(1)把分拣奇偶数的程序用泛型实现。分析算法复杂度。
9、从一个整数的ArrayList、List<int>中取出最大数。别用max方法。
1、List<int> 实现了IEnumerable<int>(泛型版本的IEnumerable)、ICollection<int> (泛型版本的ICollection) 。
2、所有的List<T>所有的方法也都是泛型的,泛型的集合提供的方法更多,Max、Min、Sort等。