跳转至

数组、字符串与集合复习#

对应笔记:数组基础数组进阶String 字符串集合与泛型泛型Array 数组方法 建议用时:60 分钟。


一、选择题#

1. int[] arr = new int[5];arr[0] 的默认值是?

  • A. 随机值
  • B. 0
  • C. null
  • D. 编译错误
答案

B. 0。数组初始化后会用该类型的默认值填充:int→0,string→null,bool→false。

2. 数组的索引从几开始?最后一个元素的下标是?

  • A. 1;Length
  • B. 0;Length-1
  • C. 0;Length
  • D. 1;Length-1
答案

B。数组下标从 0 开始,最后一个元素是 arr[arr.Length - 1]

3. Array.Resize(ref arr, 10)ref 的作用是?

  • A. 没有作用
  • B. 因为 resize 会重新分配内存并替换原引用,必须用 ref
  • C. 让数组变成引用类型
  • D. 防止数组被修改
答案

B。Resize 会创建新数组并改变变量指向,必须用 ref 才能把新引用传回调用方。

4. 下列哪种集合可以存储不同类型的数据(如 int 和 string 混存)?

  • A. List<int>
  • B. Dictionary<string, int>
  • C. ArrayList
  • D. int[]
答案

C. ArrayList。ArrayList 是非泛型集合,元素是 object 类型,可混存;List\<T> 和数组类型固定。

5. Dictionary<int, string> 通过什么访问数据?

  • A. 索引 index
  • B. 键 Key
  • C. 下标
  • D. 随机访问
答案

B。Dictionary 通过 Key 访问 Value:dict[key]。键必须唯一,添加前可用 ContainsKey 判断。

6. 装箱(Boxing)是指?

  • A. 引用类型转值类型
  • B. 值类型转引用类型(如 int → object)
  • C. 字符串转数字
  • D. 数组复制
答案

B。装箱:值类型 → object;拆箱:object → 值类型(需强制转换)。装箱拆箱有性能开销,尽量用泛型集合避免。

7. string 是值类型还是引用类型?

  • A. 值类型
  • B. 引用类型
  • C. 两者都是
  • D. 都不是
答案

B. 引用类型。string 是引用类型,但具有不可变性——每次修改都会产生新字符串。


二、填空题#

1. 数组声明格式:==_== ==== ==_== ====,如 int[] ints = new int[5];。写了初始值时可以省略 ==_== ==== ==_== ====。

答案

数据类型[] 变量名 = new 数据类型[长度]new 或长度(int[] arr = {1,2,3};)。

2. String.Split(',') 的作用是 ==_== ==== ==_== ====,string.Join("*", arr) 的作用是 ==_== ==== ==_== ====。

答案

按逗号分割字符串为字符串数组;把数组按 * 拼接为字符串(二者互为逆操作)。

3. IndexOfLastIndexOf 的区别是 ==_== ==== ==_== ====。

答案

IndexOf 从前往后找第一个匹配位置;LastIndexOf 从后往前找最后一个匹配位置。

4. ArrayList 的 Add 添加的是 ==_== ==== ==_== ==== 类型,取值时需要 ==_== ==== ==_== ====。

答案

object;拆箱(强制转换)。int n = (int)list[0];

5. List<T> 相比 ArrayList 的优势是 ==_== ==== ==_== ====。

答案

强类型、类型固定,避免了装箱拆箱的性能开销。

6. Dictionary 添加新键值对使用 ==_== ==== ==_== ==== 方法,判断键是否存在使用 ==_== ==== ==_== ====。

答案

Add(key, value)ContainsKey(key)


三、简答题#

1. 冒泡排序的核心思想是什么?如何优化?

答案

相邻元素两两比较,顺序不对就交换,每一轮把最大(小)值"冒泡"到末尾。优化:内层循环上限 arr.Length - 1 - i,已排好的位置不再比较。

2. 一维数组和二维数组如何遍历?

答案

一维:for (int i = 0; i < arr.Length; i++) 或 foreach。二维:GetLength(0) 取行数、GetLength(1) 取列数,双层 for 循环遍历。

3. StringBuilder 与字符串 + 拼接的区别?(选答)

答案

字符串不可变,大量 + 拼接会产生大量临时字符串,性能差;StringBuilder 在可变缓冲区中拼接,适合循环内大量拼接场景。


四、编程题#

1. 冒泡排序:将数组按从小到大排序。

答案

```csharp

> int[] arr = { 3, 4, 1, 6, 7, 10, 23, 45 }; > for (int i = 0; i < arr.Length; i++) > { > for (int j = 0; j < arr.Length - 1 - i; j++) > { > if (arr[j] > arr[j + 1]) > (arr[j], arr[j + 1]) = (arr[j + 1], arr[j]); // 元组交换 > } > } > ```

2. 生成 10 个 0~9 不重复的随机数(用 List)。

答案
List<int> list = new List<int>();
Random rnd = new Random();
while (list.Count < 10)
{
    int r = rnd.Next(0, 10);
    if (!list.Contains(r)) list.Add(r);
}

3. 统计一段字符串中每个字符出现的次数(用 Dictionary)。

答案
string str = "hello world";
Dictionary<char, int> dict = new Dictionary<char, int>();
foreach (char c in str)
{
    if (dict.ContainsKey(c)) dict[c]++;
    else dict[c] = 1;
}
foreach (var kv in dict)
    Console.WriteLine($"{kv.Key}: {kv.Value}");

4. 将字符串数组按 - 拼接后输出,再按 - 拆分回数组。

答案
string[] arr = { "a", "b", "c" };
string joined = string.Join("-", arr);      // "a-b-c"
string[] back = joined.Split('-');          // { "a", "b", "c" }

5. 删除数组(字符串数组)中的重复元素。

答案
string[] arr = { "aaa", "bbb", "aaa", "ccc" };
List<string> list = new List<string>();
foreach (string s in arr)
    if (!list.Contains(s)) list.Add(s);
// list = { "aaa", "bbb", "ccc" }

6. 用 Array.FindAll 筛选出所有偶数(配合 Lambda)。

答案
int[] nums = { 1, 2, 3, 4, 5, 6 };
int[] evens = Array.FindAll(nums, n => n % 2 == 0);
// evens = { 2, 4, 6 }

知识卡片#

数组与 List 的区别? > 数组长度固定、类型固定;List\<T\> 长度可动态增减,类型固定(泛型)。

ArrayList 与 List\<T\> 的区别? > ArrayList 非泛型,元素为 object,可混存不同类型但需装箱拆箱;List\<T\> 泛型强类型,性能更好。

SplitJoin 的关系?

Split 按分隔符把字符串拆成数组;Join 按分隔符把数组拼成字符串,互为逆操作。

装箱与拆箱?

装箱:值类型→object;拆箱:object→值类型(强制转换)。有性能开销,优先用泛型集合。

Dictionary 的特点?

键值对存储,通过 Key 快速查找,Key 必须唯一;添加前用 ContainsKey 判断避免重复键异常。

数组的默认值?

初始化后按类型填充默认值:int→0,string→null,bool→false,char→'\0'。

Array 常用方法?

Clear(清除)、Copy(复制)、Reverse(反转)、Sort(排序)、Resize(调整长度)、IndexOf/Find/FindAll(查找)。

字符串常用方法?

Concat 拼接、Contains 包含、StartsWith/EndsWith 开头结尾、IndexOf/LastIndexOf 查找、Split 分割、Join 拼接、Replace 替换、ToUpper/ToLower 大小写、Substring 截取。


相关笔记#