1.  ArrayList与数组

  数组的长度不可变,元素的类型单一;

  ArrayList 实际上相当于一个可变长度的动态数组,由于集合中的元素都是object类型,元素的类型可以有多种了;与数组一样,都可以用下标来访问元素。 

2.  ArrayList的常用的方法 

    ArrayList list = new ArrayList();

   1)添加元素到集合

     为集合添加单个元素: list.Add(1);

      将集合添加到集合中: list.AddRange(new int[] { 0, 1, 2, 3, 4 }); //将数组添加到集合中

                 list.AddRange(list1); //将另一个集合中所有的元素添加到集合中

      调用Add方法后,添加的元素都被转换为object类型,这里就包含了里氏转换原则。 

   2)删除集合中元素

       list.Remove(1);  //删除集合中第一个值为1的元素;删除单个元素,写谁就删谁。

       list.RemoveAt(0); //根据下标来删除元素   删除第0个元素后,后面的元素会自动移到前面来

       list.RemoveRange(2, 4); //从2位置开始,删除4个的元素

   3)确定元素是否在集合中

      if ( !list.Contains("windrunner") )

   4)将元素插入到集合中   

        list.Insert(2, "插入的元素");  //在指定位置插入一个元素

        list.InsertRange(3, new string[] {"王五","赵六","洪七"});  //在制定位置插入一个集合

   5) 对集合中元素进行排列

     list.Sort();   //升序排列,前提:集合中所有的元素必须是可以互相比较的类型;假如集合中同时存在int和string类型,则无法比较。

   6) 将整个集合中元素的顺序反转

     list.Reverse();  //如 1 2 3  变成 3 2 1

   7)清空所有的元素

     list.Clear();

3.  ArrayList集合的长度问题

  每次集合中实际包含的元素个数(count)超过了可以包含的元素的个数(capcity)的时候,
  集合就会向内存中申请多开辟一倍的空间,来保证集合的长度一直够用。

4.  ArrayList集合的两个练习

  1. //创建一个集合,里面添加一些数字,求平均值与和,最大值
  2. ArrayList list1 = new ArrayList();
  3. list1.AddRange(new int[] { , , , , , , , , });
  4. int sum = ;
  5. int max = (int)list1[]; //如果不加(int)来转换,会报错,因为不能将object类型的数据赋值给int变量
  6. foreach (int item in list1)
  7. {
  8. sum += item;
  9. if ( item > max)
  10. {
  11. max = item;
  12. }
  13.  
  14. //如果使用for循环,sum += (int)list1[i] 需要将object类型转换为int类型
  15. //使用foreach 的好处就在这里
  16. //这里实际上是里氏转换原则,1. object是int的父类,2. 集合中的元素表现出来的时候是object类型,但实际上装的是int类型
  17. }
  18.  
  19. Console.WriteLine("这个集合中所有数字的和是{0},平均值是{1}", sum, sum / list1.Count);
  20.  
  21. //写一个长度为10的集合,要求在里面随机地存放10个数字(0 - 9),但是要求所有的数字不重复
  22. ArrayList list2 = new ArrayList();
  23. int[] array = { , , , , , , , , , };
  24. ArrayList listTemp = new ArrayList(array);
  25. Random random = new Random();
  26. for (int i = ; i < ; i++)
  27. {
  28. int index = random.Next(, listTemp.Count);
  29. list2.Add(listTemp[index]);
  30. listTemp.RemoveAt(index);
  31. }
  32.  
  33. for (int i = ; i < list2.Count; i++)
  34. {
  35. Console.WriteLine(list2[i]);
  36. }
  37. Console.WriteLine();
  38.  
  39. ArrayList list3 = new ArrayList();
  40. for (int i = ; i < ; i++)
  41. {
  42. int rNumber = random.Next(, );
  43. if (!list3.Contains(rNumber))
  44. {
  45. list3.Add(rNumber);
  46. }
  47. else
  48. {
  49. //产生了重复的随机数,本次循环无效
  50. i--;
  51. }
  52. }
  53. for (int i = ; i < list3.Count; i++)
  54. {
  55. Console.WriteLine(list3[i]);
  56. }

5.  总结

  ArrayList 集合: 在存储数据的时候很方便,但在取出数据的时候就比较麻烦。因为每次取出数据,都需要进行数据类型的转换。   

C#中的集合类——ArrayList的更多相关文章

  1. Java中List,ArrayList、Vector,map,HashTable,HashMap区别用法

    Java中List,ArrayList.Vector,map,HashTable,HashMap区别用法 标签: vectorhashmaplistjavaiteratorinteger ArrayL ...

  2. JUC集合之 JUC中的集合类

    Java集合包 在"Java 集合系列01之 总体框架"中,介绍java集合的架构.主体内容包括Collection集合和Map类:而Collection集合又可以划分为List( ...

  3. Java 中 Vector、ArrayList、List 使用深入剖析

    线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构.这些类均在java.util包中.本文试图通过简单的描述,向读者阐述各个类的作用以 ...

  4. java中的集合类总结

    在使用Java的时候,我们都会遇到使用集合(Collection)的时候,但是Java API提供了多种集合的实现,我在使用和面试的时候频 频遇到这样的“抉择” . :)(主要还是面试的时候) 久而久 ...

  5. Objective-C中的集合类

    下面详细的介绍Objective-C中的集合类以及每个集合类的用法,学过其他面向对象编程语言的小伙伴们看到OC的集合类会有种莫名的亲切感,理解起来问题不大,可以类比Java中的集合类去学习. 在Obj ...

  6. C#中数组、ArrayList和List三者的区别

    在C#中数组,ArrayList,List都能够存储一组对象,那么这三者到底有什么样的区别呢. 数组 数组在C#中最早出现的.在内存中是连续存储的,所以它的索引速度非常快,而且赋值与修改元素也很简单. ...

  7. C#中数组、ArrayList和List<T>三者的发展历程

    在C#中数组,ArrayList,List使我们用的最多的类型之一.他们共同的作用都是能够存储一组对象. 那么问题来了: (1)为什么要有三个一样作用的东西呢?他们都很完美吗? (2)谁先出生,又是因 ...

  8. C#中数组、ArrayList和List三者的区别 转

    在C#中数组,ArrayList,List都能够存储一组对象,那么这三者到底有什么样的区别呢. 数组 数组在C#中最早出现的.在内存中是连续存储的,所以它的索引速度非常快,而且赋值与修改元素也很简单. ...

  9. 将java中数组转换为ArrayList的方法实例(包括ArrayList转数组)

    方法一:使用Arrays.asList()方法   1 2 String[] asset = {"equity", "stocks", "gold&q ...

随机推荐

  1. sql点滴41—mysql常见sql语法

    原文:sql点滴41-mysql常见sql语法 ALTER TABLE:添加,修改,删除表的列,约束等表的定义. 查看列:desc 表名; 修改表名:alter table t_book rename ...

  2. jquery-制作选项卡

    强大的jquery-制作选项卡   最近在学习jquery,特地把今天写的一个选项卡源码贴出来.只是做只是梳理,大神们请不要吐槽,如果有更好的方法,欢迎指点.谢谢. css <style> ...

  3. 18 个最新实用的 jQuery 插件

    1. Simple Effects for Drop-Down Lists 一个jQuery插件用于将普通的select控件转成一个带有一些简单扩展效果的下拉列表. 2. X-editable 这个插 ...

  4. 使用rem设计移动端自适应页面一(转载)

    1.困扰多时的问题 在这之前做Web App开发的的时候,在自适应方面一般都是宽度通过百分比,高度以iPhone6跟iPhone5之间的一个平衡值写死,我们的设计稿都是iPhone5的640 * 11 ...

  5. Tomcat过滤器模拟

    直接上代码Filter.java public interface Filter { //过滤器 public void doFilter(Request request,Response respo ...

  6. 我看TDD测试驱动开发

    今天在实验室给大家介绍了一下TDD和Docker,大家对TDD都比较感兴趣,包括老板,也问了一些问题. 还是从头来说TDD吧,TDD作为敏捷开发领域的领头军,充满魅力,同时也充满争议.一切从三大军规说 ...

  7. C#打包应用程序

    摘要:本文介绍在C#中手把手教你用C#打包应用程序(安装程序卸载程序) 1:新建安装部署项目 打开VS,点击新建项目,选择:其他项目类型->安装与部署->安装向导(安装项目也一样),然后点 ...

  8. 玩转python之测试一个对象是否是类字符串

    提到类型测试,我首先想到python中“鸭子类型”的特点,所谓鸭子类型,即如果它走路像鸭子,叫声也像鸭子, 那么对于我们的应用而言,就可以认为它是鸭子了!这一切都是为了功能复用. 我们总是需要测试一个 ...

  9. Lambda表达式的几种使用方式

    Lambda 的表达式的编写格式如下: x=> x * 1.5 当中 “ => ” 是 Lambda 表达式的操作符,在左边用作定义一个参数列表,右边可以操作这些参数. 例一, 先把 in ...

  10. linux 编程技术No.1前期准备工作

    原创博文,转载请注明出处. GCC的编译过程分为预处理.生成汇编代码.生成目标代码和链接成可执行文件等4个步骤. 使用vim编写C 文件 : [lining@localhost program]$ v ...