引入声明:
using System.Collections;
ArrayList list = new ArrayList();
增 可以添加任意类型(object)的数据
// 增 可以添加任意类型的数据
list.Add(1);
list.Add(new int[] { 1, 2, 3 });
list.AddRange(new int[] { 1, 2, 3 }); // 批量添加 逐一添加
Console.WriteLine(list.Count); // 5
删
// 删
list.Remove(2); // 移除第一个匹配的元素
Console.WriteLine(list.Count); // 4
// list.RemoveAt(10); // Error 超出范围
list.RemoveAt(0); // 移除指定索引元素
Console.WriteLine(list.Count); // 3
// list.RemoveRange(1, 20); // Error 超出范围
list.RemoveRange(1, 2); // 从索引1开始向后移除2个元素
Console.WriteLine(list.Count); // 1
改
// 改
// list[1] = 2; // Error 超出范围
// list[10] = 2; // Error 超出范围
list[0] = true;
Console.WriteLine(list.Count); // 1
//list.SetRange(0, new string[] { "Hello", "Lee" }); // Error 超出范围
list.SetRange(0, new string[] { "Hello" }); // 从索引0开始向后进行修改
Console.WriteLine(list.Count); // 1
查
- 遍历索引
- foreach
不允许对元素进行修改
- 枚举器/迭代器遍历
不允许对元素进行修改
IEnumerator em = list.GetEnumerator(); // 枚举器
while (em.MoveNext()) {
object obj = em.Current;
Console.WriteLine(obj); // Hello
}
查询索引
// 查 查询索引
int index1 = list.IndexOf(3); // 查询某个元素第一次出现的索引值
Console.WriteLine(index1); // -1
int index2 = list.IndexOf("Hello");
Console.WriteLine(index2); // 0
int index3 = list.LastIndexOf(3); // 查询某个元素最后一次出现的索引值
Console.WriteLine(index3); // -1
int index4 = list.IndexOf("Hello");
Console.WriteLine(index4); // 0
int index5 = list.BinarySearch("Hello"); // 使用二分查找查询索引
Console.WriteLine(index5); // 0
其他方法
ArrayList list = new ArrayList();
list.Add(1);
list.AddRange(new int[] { 1, 2, 3 });
list.Sort(); // 集合升序
list.Reverse(); // 集合倒序
list.Contains(true); // 判断集合中是否包含某个元素 bool
list.Insert(0, "abc"); // 增 插入一个数据
list.InsertRange(0, new int[] { 1, 2, 3 }); // 增 批量插入数据
Console.WriteLine(list.Count); // 8
Sort
自定义排序
using System;
using System.Collections;
using System.Collections.Generic;
namespace ConsoleDemo
{
class Program
{
static void Main(string[] args)
{
ArrayList arraylist = new ArrayList();
arraylist.AddRange(new Person[] { new Person(10), new Person(3), new Person(2), new Person(10), new Person(7) });
Console.WriteLine("=====无序集合=========================");
foreach (object item in arraylist)
{
Console.WriteLine(item.ToString()); // 10 3 2 10 7
}
Console.WriteLine("=====升序集合=========================");
arraylist.Sort();
foreach (object item in arraylist)
{
Console.WriteLine(item.ToString()); // 2 3 7 10 10
}
Console.WriteLine("=========================================================");
List<Person> personList = new List<Person>();
personList.AddRange(new Person[] { new Person(10), new Person(3), new Person(2), new Person(10), new Person(7) });
Console.WriteLine("=====无序集合=========================");
foreach (object item in personList)
{
Console.WriteLine(item.ToString()); // 10 3 2 10 7
}
Console.WriteLine("=====降序集合=========================");
personList.Sort();
foreach (object item in personList)
{
Console.WriteLine(item.ToString()); // 10 10 7 3 2
}
Console.ReadKey();
}
}
class Person : IComparable, IComparable<Person> {
int age;
public Person(int age) {
this.age = age;
}
/// <summary>
/// 重写ToString方法
/// </summary>
/// <returns>返回当前类中定义的年龄</returns>
public override string ToString()
{
return age.ToString();
}
/// <summary>
/// 定义比较规则
/// </summary>
/// <param name="obj">比较参数,需要判断obj是不是Person</param>
/// <returns>根据正负来决定升序降序</returns>
public int CompareTo(object obj)
{
if (obj is Person)
{
Person person = obj as Person; // 将obj转型为Person类型
//return person.age - age; // 降序
return age - person.age; // 升序
}
return 0;
}
/// <summary>
/// 通过泛型接口进行排序
/// </summary>
/// <param name="obj">Person类型的比较参数</param>
/// <returns>根据正负来决定升序降序</returns>
public int CompareTo(Person obj)
{
return obj.age - age; // 降序
//return age - obj.age; // 升序
}
}
}