数组与集合(基础篇)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组与集合(基础篇)相关的知识,希望对你有一定的参考价值。

一、数组

能存放任意多个同类型的数据
1. 数据的声明与赋值
合并书写:数据类型[] 变量名 = new 数据类型[长度]
① 声明:数据类型[] 变量名;
② 赋值:变量名 = new 数据类型[长度]
2. 数组项的读取与修改
读取:变量名[索引]
(从指定数组中,通过编号取出某一个数组项的值,返回类型与数组项类型的值相同)
修改:变量名[索引] = 值;
示例:
int [ ] numbers = new int[3];
numbers[0] = 3;
numbers[1] = -2;
numbers[3] = numbers[0] * 2 + numbers[1];
Console.WriteLine(numbers[3]);
索引范围0-4
3.读取数组的长度
代码格式:变量名.Length
返回类型 int
示例:
创建一个长度为3的字符串数组,然后依次为它的每一项分别赋值为a,b,c。最后输出该数组的长度。
string[] strs = new string[3];
strs[0] = "a";
strs[1] = "b";
strs[2] = "c";
Console.Write(strs.Length);
简化为:
string[] strs = {"a","b","c"};
Console.Write(strs.Length);
Console.WriteLine(numbers.Length);
4. 数组初始化器
数组初始化器是指:给数组赋值的同时,指定数组每一项的值
代码①:
int[] nums; //声明数组
nums = new int[3]{2, 5, 1}; // 使用数组初始化器,给数组赋值的同时指定它每一项的值

// 使用数组初始化器,给数组赋值的同时指定它每一项的值
string[] strs = new string[2]{"Hello", "World"};
代码②:
//不指定数组长度,编译器会根据初始化器中的数量自动填充数组长度
int[] nums1 = new int[]{2,3};// 编译器会将该数组的长度设置为2
int[] nums2 = new int[]{2,3,1};// 编译器会将该数组的长度设置为3
简化为:
int[] nums1 = {2,3};
int[] nums2 = {2,3,1};

二、数组的定长性


指一个数组创建后,它的长度固定不变

数组适用于数据数量固定的场景:
1. 适合使用数组的场景:
① 保存100以内的所有质数
② 保存太阳系中所有已知行星的数据
③ 保存标准扑克牌中的所有牌面数据
④ 保存一个星期的所有日期
⑤ 其他定长的数据场景
2. 不适合使用数组的场景:
① 保存一个班的学生信息
② 保存一年中的所有日期
③ 保存斗地主游戏中某玩家的手牌数据
④ 保存游戏中某玩家的装备信息
⑤ 其他不定长的数据场景
示例:
int[] numbers = new int[3];
numbers[0] = 3;
numbers = new int[2];
Console.WriteLine(numbers[0]);
结果为0

三、数组的遍历


示例:
有一个数据,变量名为 arrays,请输出该数组每一项的值。
Console.WriteLine(arrays[i]); //变量i的变化范围:0—arrays.Length-1
for (int i = 0; i <=arrays.Length -1; i++)
{
Console.WriteLine(arrays);
}
是指从数组的第一项开始,一次取完数组的所有项
要实现数组的遍历,可以使用循环
循环的变量从0开始,依次取到数组的最大下标(数组的长度 -1)
在循环体中,使用循环变量作为下标,即可取出数组每一项的值
for (int i = 0; i < arrays.Length; i++)
{
Console.WriteLine(arrays[i]);
}

四、交换排序


排序问题:有一个数组,数组中存放了很多数字,现要求将数组中的数字按照从小到大的顺序排列
示例:
分析:如果索引为0的数字比索引为 j 的数字大,则交换。// j =1— arrays.Length-1
for (int j = 0; j < arrays.Length-1; j++ )
{
for (int j = i+1; j < arrays.Length; j++ )
{
if (arrays[0] >arrays[ j ] )
{
int temp = arrays[0];
arrays[0] = arrays[ j ];
arrays[ j ] = temp;
}
}
}

示例:

#region 创建数组
Console.Write("请输入数组的长度:");
int len = int.Parse(Console.ReadLine());
int[] numbers = new int[len];
for (int i = 0; i < numbers.Length; i++)
{
Console.Write("请输入数组的第" + (i + 1) + "项:");
numbers[i] = int.Parse(Console.ReadLine());
}
#endregion

Console.Clear();

#region 升序排序
for (int i = 0; i < numbers.Length - 1; i++)
{
for (int j = i + 1; j < numbers.Length; j++)
{
if (numbers[i] > numbers[j])
{
int temp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = temp;
}
}
}
#endregion

#region 输出数组
Console.WriteLine("您输入的数字排序后如下:");
for (int i = 0; i < numbers.Length; i++)
{
Console.Write(numbers[i] + " ");
}
Console.WriteLine();
#endregion

#region 寻找奇数
Console.WriteLine("其中,以下数字是奇数:");
for (int i = 0; i < numbers.Length; i++)
{
if (numbers[i] % 2 != 0)
{
Console.Write(numbers[i] + " ");
}

}
Console.WriteLine();
#endregion

#region 寻找质数
Console.WriteLine("以下数字是质数:");
for (int i = 0; i < numbers.Length; i++)
{
bool isFind = false;
for (int j = 2; j < numbers[i]; j++)
{
if (numbers[i] % j == 0)
{
isFind = true;
break;
}
}
if (!isFind)
{
Console.Write(numbers[i] + " ");
}
}
#endregion
Console.ReadLine();

 

五、集合

在功能上,数组能实现的所有功能,集合都能实现
数组集合
用于储蓄多个同类型的数据
数组
定长:用于保存固定数量的数据
占用内存少
遍历速度快
集合
不定长:保存的数据数量,可以在程序的执行过程中,不断发生变化
占用内存多
遍历速度慢
C#语言支持的集合类型
List
1. 创建
① 定义:List <数据类型> 变量名;
② 赋值:变量名 = new List <数据类型>();
定义和赋值合并书写:
List <数据类型> 变量名 = new List<数据类型>();
③ 初始化器:变量名 = new Lise<数据类型>{元素1,元素2,元素3,......元素n};
2. 操作
① 添加元素:变量名.Add(要添加的元素)
② 插入元素:向集合的指定位置,插入一个新的元素
代码:变量名.Insert(索引,要插入的数据);
示例:
List<int> nums = new List<int>{3,5,7};
nums.Insert(1,0);
③ 删除元素
变量名.Remove At(索引);
指删除指定索引位置的元素
变量名.Remove(数据);
指删除集合中填写的数据相同的第一个匹配项
示例:
List<int>nums = new List <int>{1,1,2,3,5};
nums.Remove At(2); //表示删除索引为2的元素
nums.Remove(1); //表示删除与数据1相同的第一个元素
④ 修改元素
修改集合中某个元素的值
代码:变量名[索引] = 值
读取和修改元素与数组的操作方式完全一致
⑤ 获取元素数量
获取集合的长度
代码:变量名.Count
Queue
Stack
LinkedList
Hashset
其他

 

六、foreach循环


只能用于遍历数组或集合
代码格式:
foreach(数据类型 变量 in 数组或集合)
{
循环体
}
① 表示从数组或集合中,依次取出每一项的数据
② 每取出一项数据,就把数据赋值给循环变量
③ 每一次赋值后,运行一次循环体
示例:已知有一个int类型的List集合,变量名为numbers,要求依次输出集合中的每一项。
foreach (int item in numbers)
{
Console.WriteLine(item);
}
foreach循环也叫做只读循环
在循环体中,不能更改集合或数组
foreach 循环:
① 只能用于遍历
② 不能更改循环目标
③ 遍历速度快,执行效率高
for 循环:
① 可以用于任何形式的重复行为
② 在循环体中,可以进行任何操作
③ 遍历速度慢,执行效率低
若需要遍历集合或数组,并且遍历的过程中只需要读取而不会更改,用foreach循环最合适。反之,则根据需要,选择其他循环。

以上是关于数组与集合(基础篇)的主要内容,如果未能解决你的问题,请参考以下文章

Java学习笔记系列-基础篇-集合

基础篇之集合总结

go+系列数组集合基础篇

Java基础学习:集合篇

一脚踩进java之基础篇34——可变参数Collection工具类集合嵌套

一脚踩进java之基础篇34——可变参数Collection工具类集合嵌套