目录

一、ArrayList

1、Add()

2、AddRange()

3、Contains()、IndexOf()、Remove()

4、Insert()、InsertRange()、Clear()

5、LastIndexOf()、Reverse()

二、List

1、创建List对象

2、添加元素

3、删除元素

1.Remove()方法

2.RemoveAt()方法

3.Clear()方法

4、查找元素

1.Contains()方法

2.IndexOf()方法

5、遍历List

1.使用for循环遍历

2.使用foreach循环遍历

3.List.ForEach()

4. Find()

5.FindIndex()

6、List常用属性及方法

三、Dictionary

 1、声明 & 创建字典

1. 基础声明

2. 初始化赋值

2、常用增删改查

1. 添加元素 Add()

2. 索引器添加 / 修改(推荐)

3. 安全添加(不报错)

4. 查找取值

5. 判断是否包含键 / 值

6. 删除元素

3、遍历字典 3 种方式

1:遍历 KeyValuePair

2:只遍历所有 Key

 3:只遍历所有 Value

4、字典常用属性

5、常见易错点

6、字典存自定义类(实操)

一、ArrayList

了解:
   (1)ArrayList实现了IList, ICollection, IEnumerable, ICloneable接口
   (2)IList:List列表,主要负责集合的插入,添加,删除,取索引,判断是否包含某个项等操作。
  (3)Collection:Collection集合。主要负责集合中的项的个数,集合的复制,拷贝等。
  (4)IEnumerable:Enumerable可枚举的, 可数的。主要实现迭代器,实现此接口类都可以被循环,被遍历,被迭代,被枚举
  (5)ICloneable:Cloneable克隆。主要负责集合的克隆(复制,拷贝),了解和ICollection接口中CopyTo()的区别:https://blog.csdn.net/yao_hou/article/details/134484811

区别 :

(1)ArrayList定义完之后数组的长度可以动态添加       int[]一旦定义完之后 长度是固定的,
(2) ArrayList存储的是对象类型                                   int[]数组只能存储相同类型的数据
(3)ArrayList存取数据出现装箱、拆箱操作                  int[] 不用装箱和拆箱
(4)ArrayList存储数据类型不安全                                 int[]数据类型安全

(5)ArrayList直接继承object                                          int[] 继承于Array 继承于Object

1、Add()

ArrayList list1= new ArrayList(); //创建一个动态集合对象

 //添加元素  把1转成对象类型之后 再添加到动态集合里面,
 //把值类型转成引用类型的过程,就是装箱操作
 list1.Add(1);
 list1.Add(2);
 list1.Add(3);

2、AddRange()

  // AddRange() 添加一个范围 可以添加一个数组类型的数据. 也可以添加一个集合类型数据 
int[] ages = new int[] {1,2,3,4,5};
ArrayList list = new ArrayList() { 1, 2, 3, true, "ss", new object() };
ArrayList list1= new ArrayList(); //创建一个动态集合对象
list1.AddRange(ages);
list1.AddRange(list);

3、Contains()、IndexOf()、Remove()

ArrayList list1= new ArrayList(); //创建一个动态集合对象
 //4 Contains 是否包含某个元素
 Console.WriteLine(list1.Contains(1));//true

//5  IndexOf() 获取某个元素的索引值
 Console.WriteLine(list1.IndexOf(1)); 

// 6 remove() 移除指定元素
list1.Remove(1);

4、Insert()、InsertRange()、Clear()

  //8 Insert()在指定位置添加一个元素
  list1.Insert(0, "李四");

  //在指定位置添加一个范围数据
  list1.InsertRange(2,ages);

  //9清空集合
  list1.Clear();

5、LastIndexOf()、Reverse()

 //LastIndexOf 找索引值 从后往前找
 Console.WriteLine(list1.LastIndexOf("李四"));
 // 颠倒数组的元素
 // list1.Reverse();

6、遍历

// for遍历
// list1.Count 集合数据个数
for (int i = 0; i < list1.Count; i++)
{
   Console.WriteLine(list1[i]);
 }


 foreach (var item in list1)
{
   Console.WriteLine(item+"------");
}

二、List

    在C#中,List<T>是一种非常常用的泛型集合类,用于存储一组相同类型的元素。List<T>具有动态调整大小的能力,可以方便地添加、删除、查找修改元素,非常灵活和高效

1、创建List<T>对象

// 创建一个整数列表

List<int> list = new List<int>();

List<int> list = {1,2,3,4,5};

// 创建一个字符串列表
List<string> list = new List<string>();

2、添加元素

List<T>提供了多个方法用于添加元素到列表中,最常用的是Add()方法。

List<string> fruitsList = new List<string>();

// 添加元素到列表
fruitsList.Add("apple");
fruitsList.Add("orange");
fruitsList.Add("banana");

3、删除元素

List<T>提供了多个方法用于删除元素,常用的有Remove()RemoveAt()Clear()方法。

1.Remove()方法

Remove()方法用于从列表中删除指定元素。如果列表中存在多个相同的元素,只会删除第一个匹配的元素。

List<string> fruitsList = new List<string> { "apple", "orange", "banana" };
fruitsList.Remove("orange"); // 从列表中删除元素"orange"

在上述代码中,Remove("orange")会删除列表fruitsList中的第一个元素"orange"。

2.RemoveAt()方法

RemoveAt()方法用于根据索引从列表中删除元素。

List<string> fruitsList = new List<string> { "apple", "orange", "banana" };
fruitsList.RemoveAt(1); // 从列表中删除索引为1的元素,即"orange"

在上述代码中,RemoveAt(1)会删除列表fruitsList中索引为1的元素"orange"。

3.Clear()方法

Clear()方法用于清空整个列表,即删除所有元素。

List<string> fruitsList = new List<string> { "apple", "orange", "banana" };
fruitsList.Clear(); // 清空列表

在上述代码中,Clear()会将列表fruitsList中的所有元素全部删除,列表变为空。

4、查找元素

List<T>提供了多个方法用于查找元素,常用的有Contains()IndexOf()方法。

1.Contains()方法

Contains()方法用于判断列表中是否包含指定元素,返回一个布尔值。

List<string> fruitsList = new List<string> { "apple", "orange", "banana" };
bool isContains = fruitsList.Contains("orange"); // 判断列表是否包含元素"orange"

在上述代码中,isContains将会被赋值为true,因为列表fruitsList中包含元素"orange"。

2.IndexOf()方法

IndexOf()方法用于查找指定元素在列表中的索引,如果列表中存在多个相同的元素,只返回第一个匹配的元素索引。

List<string> fruitsList = new List<string> { "apple", "orange", "banana" };
int index = fruitsList.IndexOf("orange"); // 查找元素"orange"的索引

在上述代码中,index将会被赋值为1,表示元素"orange"在列表fruitsList中的索引为1。

5、遍历List<T>

可以使用循环结构(如forforeach)遍历List<T>中的所有元素。

1.使用for循环遍历
List<int> numbersList = new List<int> { 1, 2, 3, 4, 5 };

// 使用for循环遍历列表
for (int i = 0; i < numbersList.Count; i++)
{
    Console.WriteLine(numbersList[i]);
}
2.使用foreach循环遍历
List<int> numbersList = new List<int> { 1, 2, 3, 4, 5 };

// 使用foreach循环遍历列表
foreach (int number in numbersList)
{
    Console.WriteLine(number);
}

在上述代码中,count将会被赋值为5,表示列表numbersList中有5个元素。

3.List.ForEach()

List 自带的遍历方法,遍历集合中每一个元素,执行自定义操作。

语法:list.ForEach(元素 => 执行操作);

List<int> list = new List<int> { 10, 20, 30, 40 };

// 方式1:Lambda 最简
list.ForEach(x => Console.WriteLine(x));
//多行操作 {}
//x是元素

List<int> list = new List<int> { 10, 20, 30, 40 };

list.ForEach(x =>
{
    Console.WriteLine("数字:" + x);
    Console.WriteLine("平方:" + x * x);
});
  • ForEach 里面不能用 break、continue
  • 遍历中不要增删 List 元素,会报错
  • List 专属,数组、Array 没有 ForEach
4. Find()

找到第一个匹配的对象,找不到返回 null。

 List<int> list = new List<int> { 10, 20, 30, 40 };

 // 找第一个大于20的数
 //Find 查找元素对象
 //()写的满足条件函数
 //x 就是每一个元素

 int res = list.Find(x => x > 20);

 Console.WriteLine(res); // 输出 30
5.FindIndex()

按条件找索引下标,找不到返回 -1。

 //FindIndex 按条件找索引下标,找不到返回 -1
 //()写的满足条件函
 //x 就是每一个元素

// 找第一个大于30的元素下标
int index = list.FindIndex(x => x > 30);
Console.WriteLine(index);  // 2

6、List<T>常用属性及方法

属性 方法
Count 用于获取列表中元素的个数
Items 获取或设置指定索引处的元素
方法 用法
Add() 在 List<T> 的末尾添加一个元素。
AddRange() 在 List<T> 的末尾添加指定集合的元素。
Clear() 从 List<T> 中移除所有元素。
Remove() 移除指定元素的第一个匹配项。
RemoveAt() 移除指定索引处的元素。
Contains() 检查指定元素是否存在于 List<T> 中。
Sort() 对所有元素进行排序。
IndexOf() 查找指定元素在列表中的索引。
Reverse() 逆转List<T>中元素的顺序
Insert() 在 List<T> 中指定索引处插入元素。
InsertRange() 在指定索引处插入另一个集合的元素。
Find() 在List中查找满足特定条件的元素,找不到返回null。
FindIndex() 按条件找索引下标,找不到返回 -1。

三、Dictionary

Dictionary<Key, Value>

  • 键值对集合:Key (唯一键) → Value (值)
  • Key 不能重复,不能为 null;Value 可以重复,可以为 null
  • 无序存储,查找速度极快(哈希表原理)
  • 命名空间:using System.Collections.Generic;

 1、声明 & 创建字典

1. 基础声明
// 键:string ;  值:int

Dictionary<string,int> dic=new Dictionary<string,int>();
2. 初始化赋值
// 方式1:初始化器
 
Dictionary<string,int> dic =new Dictionary<string,int>(){
     {"语文",90},
     {"数学",85 },
 };

// 方式2:简写(C# 6.0+)

 Dictionary<string, int> dic2 = new Dictionary<string, int>()
 {
     ["语文"]=90,
     ["数学"]=80
 };

2、常用增删改查

1. 添加元素 Add()
Dictionary<string, int> dic = new Dictionary<string, int>();

// 添加键值对
dic.Add("张三", 88);
dic.Add("李四", 76);

⚠️ 注意:添加重复 Key 直接报错

2. 索引器添加 / 修改(推荐)
// 不存在则新增,存在则覆盖修改
dic["王五"] = 92;
dic["张三"] = 95; // 覆盖原来张三的分数
3. 安全添加(不报错)
// 键不存在才添加,存在不做任何操作
dic.TryAdd("赵六", 80);
4. 查找取值
// 方式1:索引器,键不存在直接报错
int score = dic["张三"];

// 方式2:TryGetValue 安全取值(推荐)
if (dic.TryGetValue("张三", out int s))
{
    Console.WriteLine("分数:" + s);
}
else
{
    Console.WriteLine("不存在该学生");
}
5. 判断是否包含键 / 值
// 是否包含某个键
bool hasKey = dic.ContainsKey("张三");

// 是否包含某个值
bool hasValue = dic.ContainsValue(88);
6. 删除元素
// 根据 Key 删除
dic.Remove("李四");

// 清空所有元素
dic.Clear();

3、遍历字典 3 种方式

1:遍历 KeyValuePair
foreach (KeyValuePair<string, int> item in dic)
{
    Console.WriteLine($"姓名:{item.Key},分数:{item.Value}");
}
2:只遍历所有 Key
foreach (string key in dic.Keys)
{
    Console.WriteLine(key + " → " + dic[key]);
}
 3:只遍历所有 Value
foreach (int val in dic.Values)
{
    Console.WriteLine("分数:" + val);
}

4、字典常用属性

// 获取元素个数
int count = dic.Count;

// 所有键集合
var keys = dic.Keys;

// 所有值集合
var values = dic.Values;

5、常见易错点

  1. Key 不能重复:Add 重复添加,Key 抛异常;索引器添加,直接覆盖
  2. Key 不能为 null,Value 可以为 null
  3. 不要用 foreach 遍历字典时增删元素,会报错
  4. 取值优先用 TryGetValue,避免键不存在程序崩溃

6、字典存自定义类(实操)

1、比如存 Student 学生对象:


class Student
{
    public string Name { get; set; }
    public int Score { get; set; }
}

使用字典:Key 存学号,Value 存学生对象

// 键:学号string,值:Student对象
Dictionary<string, Student> stuDic = new Dictionary<string, Student>();

// 添加
stuDic["001"] = new Student { Name = "张三", Score = 85 };
stuDic["002"] = new Student { Name = "李四", Score = 92 };

// 取值
var s = stuDic["001"];
Console.WriteLine(s.Name + " " + s.Score);

// 遍历
foreach (var item in stuDic)
{
    Console.WriteLine($"学号{item.Key} 姓名{item.Value.Name} 分数{item.Value.Score}");
}

2、统计一个字符串每个字符串符出现的次数,以及谁的次数最多,要求使用字典?

string s1 = "aasdfghjklasdfghj";

Dictionary<char,int> dic= new Dictionary<char,int>();
for (int i = 0; i < s1.Length; i++) {

    if (!dic.ContainsKey(s1[i]))    dic[s1[i]] = 1;
    else     dic[s1[i]]++;                  
                
}
foreach (var item in dic) {

    Console.WriteLine(item.Key+":"+item.Value);
}

char maxElement = ' ';
int maxCount = 0;

foreach (var item in dic) {
    if (maxCount < item.Value) { 
        maxCount=item.Value;
        maxElement = item.Key;
    }
}

foreach (var item in dic)
{
    if (item.Value == maxCount) {
        Console.WriteLine(item.Key+":"+item.Value);
    }
}

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐