using System;
using System.Collections;
namespace Lesson1_ArrayList
{
class Test
{
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Lesson1_ArrayList");
#region 练习题回顾
/*
* C#核心中,索引器的练习题
* 自定义一个整型数组类,该类中有一个整型数组变量
* 为它封装增删改查的方法
*/
#endregion
#region 知识点一 ArrayList的本质
/*
* 一个存储任意类型的容器
* ArrayList是一个C#为我们封装好的类
* 它的本质是一个Object类型的数组
* ArrayList类帮助我们实现了很多的方法
* 比如数组的增删改查
*/
#endregion
#region 知识点二 声明
//需要引用命名空间 using System.Collections;
ArrayList array = new ArrayList();
#endregion
#region 知识点三 增删改查
#region 增
//将对象添加到 ArrayList 的结尾处。
//public virtual int Add (object? value);
array.Add(1);
array.Add("123");
array.Add(true);
array.Add(new object());
array.Add(new Test());
array.Add(true);
ArrayList array2 = new ArrayList();
array2.Add(123);
//将 ICollection 的元素添加到 ArrayList 的末尾。
//public virtual void AddRange (System.Collections.ICollection c);
array.AddRange(array2);
#endregion
#region 删
//从 ArrayList 中移除特定对象的第一个匹配项。
//public virtual void Remove (object? obj);
array.Remove(1);
//移除 ArrayList 的指定索引处的元素。
//public virtual void RemoveAt (int index);
array.RemoveAt(2);
//Clear() 从 ArrayList 中移除所有元素。
//public virtual void Clear ();
//array.Clear();
#endregion
#region 改
array[0] = "999";
Console.WriteLine(array[0]);
//将元素插入 ArrayList 的指定索引处。
//public virtual void Insert (int index, object? value);
array.Insert(0, "Panzi");
Console.WriteLine(array[0]);
#endregion
#region 查
//得到指定位置的元素
//成员属性 Item[Int32] 获取或设置指定索引处的元素。
Console.WriteLine(array[0]);
//确定某元素是否在 ArrayList 中。
//public virtual bool Contains (object? item);
if (array.Contains("123"))
{
Console.WriteLine("Exits \"123\" ");
}
//正向查找元素位置
//找到返回值 为位置,找不到返回-1
int index = array.IndexOf(true);
Console.WriteLine(index);
Console.WriteLine(array.IndexOf(false));//return -1
#endregion
#region 遍历
//属性 获取 ArrayList 中实际包含的元素数。
//public virtual int Count { get; }
int len1 = array.Count;
//属性 获取容量
//public virtual int Capacity { get; set; }
int capacity = array.Capacity;
//迭代器遍历
foreach(object item in array)
{
Console.Write(item);
}
#endregion
#endregion
#region 知识点四 装箱拆箱
// ArrayList本质上是一个可以自动扩容的object数组,
// 由于用万物之父来存储数据,自然存在装箱拆箱。
// 当往其中进行值类型存储时就是在装箱,当将值类型对象取出来转换使用时,就存在拆箱。
// 所以ArrayList尽量少用,之后我们会学习更好的数据容器。
int i = 1;
array[0] = i;//装箱
i = (int)array[0];//拆箱
#endregion
}
}
}
练习题
### 练习题
#### 1.简述ArrayList和数组的区别
1. ArrayList存储的是Object,Object可以存储任何类型;数组只能存储一种类型
2. ArrayList有各种方法,数组没有
3. ArrayList可以插入新数据,数组不可以
#### 2.创建一个背包管理类
使用ArrayList存储物品,实现购买物品,卖出物品,显示物品的功能,购买与卖出物品会导致金钱变化