C#中的集合类——ArrayList
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集合的两个练习
- //创建一个集合,里面添加一些数字,求平均值与和,最大值
- ArrayList list1 = new ArrayList();
- list1.AddRange(new int[] { , , , , , , , , });
- int sum = ;
- int max = (int)list1[]; //如果不加(int)来转换,会报错,因为不能将object类型的数据赋值给int变量
- foreach (int item in list1)
- {
- sum += item;
- if ( item > max)
- {
- max = item;
- }
- //如果使用for循环,sum += (int)list1[i] 需要将object类型转换为int类型
- //使用foreach 的好处就在这里
- //这里实际上是里氏转换原则,1. object是int的父类,2. 集合中的元素表现出来的时候是object类型,但实际上装的是int类型
- }
- Console.WriteLine("这个集合中所有数字的和是{0},平均值是{1}", sum, sum / list1.Count);
- //写一个长度为10的集合,要求在里面随机地存放10个数字(0 - 9),但是要求所有的数字不重复
- ArrayList list2 = new ArrayList();
- int[] array = { , , , , , , , , , };
- ArrayList listTemp = new ArrayList(array);
- Random random = new Random();
- for (int i = ; i < ; i++)
- {
- int index = random.Next(, listTemp.Count);
- list2.Add(listTemp[index]);
- listTemp.RemoveAt(index);
- }
- for (int i = ; i < list2.Count; i++)
- {
- Console.WriteLine(list2[i]);
- }
- Console.WriteLine();
- ArrayList list3 = new ArrayList();
- for (int i = ; i < ; i++)
- {
- int rNumber = random.Next(, );
- if (!list3.Contains(rNumber))
- {
- list3.Add(rNumber);
- }
- else
- {
- //产生了重复的随机数,本次循环无效
- i--;
- }
- }
- for (int i = ; i < list3.Count; i++)
- {
- Console.WriteLine(list3[i]);
- }
5. 总结
ArrayList 集合: 在存储数据的时候很方便,但在取出数据的时候就比较麻烦。因为每次取出数据,都需要进行数据类型的转换。
C#中的集合类——ArrayList的更多相关文章
- Java中List,ArrayList、Vector,map,HashTable,HashMap区别用法
Java中List,ArrayList.Vector,map,HashTable,HashMap区别用法 标签: vectorhashmaplistjavaiteratorinteger ArrayL ...
- JUC集合之 JUC中的集合类
Java集合包 在"Java 集合系列01之 总体框架"中,介绍java集合的架构.主体内容包括Collection集合和Map类:而Collection集合又可以划分为List( ...
- Java 中 Vector、ArrayList、List 使用深入剖析
线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构.这些类均在java.util包中.本文试图通过简单的描述,向读者阐述各个类的作用以 ...
- java中的集合类总结
在使用Java的时候,我们都会遇到使用集合(Collection)的时候,但是Java API提供了多种集合的实现,我在使用和面试的时候频 频遇到这样的“抉择” . :)(主要还是面试的时候) 久而久 ...
- Objective-C中的集合类
下面详细的介绍Objective-C中的集合类以及每个集合类的用法,学过其他面向对象编程语言的小伙伴们看到OC的集合类会有种莫名的亲切感,理解起来问题不大,可以类比Java中的集合类去学习. 在Obj ...
- C#中数组、ArrayList和List三者的区别
在C#中数组,ArrayList,List都能够存储一组对象,那么这三者到底有什么样的区别呢. 数组 数组在C#中最早出现的.在内存中是连续存储的,所以它的索引速度非常快,而且赋值与修改元素也很简单. ...
- C#中数组、ArrayList和List<T>三者的发展历程
在C#中数组,ArrayList,List使我们用的最多的类型之一.他们共同的作用都是能够存储一组对象. 那么问题来了: (1)为什么要有三个一样作用的东西呢?他们都很完美吗? (2)谁先出生,又是因 ...
- C#中数组、ArrayList和List三者的区别 转
在C#中数组,ArrayList,List都能够存储一组对象,那么这三者到底有什么样的区别呢. 数组 数组在C#中最早出现的.在内存中是连续存储的,所以它的索引速度非常快,而且赋值与修改元素也很简单. ...
- 将java中数组转换为ArrayList的方法实例(包括ArrayList转数组)
方法一:使用Arrays.asList()方法 1 2 String[] asset = {"equity", "stocks", "gold&q ...
随机推荐
- sql点滴41—mysql常见sql语法
原文:sql点滴41-mysql常见sql语法 ALTER TABLE:添加,修改,删除表的列,约束等表的定义. 查看列:desc 表名; 修改表名:alter table t_book rename ...
- jquery-制作选项卡
强大的jquery-制作选项卡 最近在学习jquery,特地把今天写的一个选项卡源码贴出来.只是做只是梳理,大神们请不要吐槽,如果有更好的方法,欢迎指点.谢谢. css <style> ...
- 18 个最新实用的 jQuery 插件
1. Simple Effects for Drop-Down Lists 一个jQuery插件用于将普通的select控件转成一个带有一些简单扩展效果的下拉列表. 2. X-editable 这个插 ...
- 使用rem设计移动端自适应页面一(转载)
1.困扰多时的问题 在这之前做Web App开发的的时候,在自适应方面一般都是宽度通过百分比,高度以iPhone6跟iPhone5之间的一个平衡值写死,我们的设计稿都是iPhone5的640 * 11 ...
- Tomcat过滤器模拟
直接上代码Filter.java public interface Filter { //过滤器 public void doFilter(Request request,Response respo ...
- 我看TDD测试驱动开发
今天在实验室给大家介绍了一下TDD和Docker,大家对TDD都比较感兴趣,包括老板,也问了一些问题. 还是从头来说TDD吧,TDD作为敏捷开发领域的领头军,充满魅力,同时也充满争议.一切从三大军规说 ...
- C#打包应用程序
摘要:本文介绍在C#中手把手教你用C#打包应用程序(安装程序卸载程序) 1:新建安装部署项目 打开VS,点击新建项目,选择:其他项目类型->安装与部署->安装向导(安装项目也一样),然后点 ...
- 玩转python之测试一个对象是否是类字符串
提到类型测试,我首先想到python中“鸭子类型”的特点,所谓鸭子类型,即如果它走路像鸭子,叫声也像鸭子, 那么对于我们的应用而言,就可以认为它是鸭子了!这一切都是为了功能复用. 我们总是需要测试一个 ...
- Lambda表达式的几种使用方式
Lambda 的表达式的编写格式如下: x=> x * 1.5 当中 “ => ” 是 Lambda 表达式的操作符,在左边用作定义一个参数列表,右边可以操作这些参数. 例一, 先把 in ...
- linux 编程技术No.1前期准备工作
原创博文,转载请注明出处. GCC的编译过程分为预处理.生成汇编代码.生成目标代码和链接成可执行文件等4个步骤. 使用vim编写C 文件 : [lining@localhost program]$ v ...