C#-集合及特殊集合——★★哈希表集合★★

时间:2023-03-10 03:26:58
C#-集合及特殊集合——★★哈希表集合★★

集合的基本信息:
System.Collections命名空间包含接口和类,这些接口和类定义各种对象(如列表、队列、位组数、哈希表和字典)的集合。
System.Collections.Generic命名空间包含定义泛型集合的集合和类,泛型集合允许用户创建强类型集合,它能提供比非泛型强类型集合更好的类型安全性和性能。
System.Collections.Specialized命名空间包含专用的和强类型的集合,例如,链接的列表词典、位向量以及只包含字符串的集合。
常用的集合为ArrayList类;特殊集合一般会用到Queue队列集合、Stack栈集合还有Hashtable哈希表集合。
集合不同于数组,是一组可变数量的元素的组合,这些元素可能共享某些特征,需要以某种操作方式一起进行操作。一般来说,这些元素的类型是相同的。
集合与数组的区别:数组是连续的、同一类型数据的一块区域,而集合可以是不连续的、多种数据类型的。

一、ArrayList集合:
ArrayList实现了IList、ICollection、Ienumerable接口。

ArrayList与Array的名字很相似,现在来比较一下两者的异同:
相同点:
1、两者都实现了IList、ICollection、Ienumerable接口。
2、两者都可以使用整数索引访问集合中的元素,包括读取和赋值,且集合中的索引都从0开始。
不同点:
1、ArrayList是集合,而Array是数组;
2、ArrayList是具体类,Array是抽象类;
3、数组必须在实例化时指定元素的数量,该数量一旦确定就不可以更改了,而ArrayList实例时可以不指定集合元素数(有默认初始数量),当然你也可以指定初始容量;
4、获取数组的元素数时使用Length属性,而获取ArrayList集合的元素数时使用Count属性;
5、数组可以有多维,而ArrayList只能是一维。

ArrayList具体提供的功能:
属性——功能说明:
.Count——获取 ArrayList 中实际包含的元素数;
方法——功能说明:
.Add()——将对象添加到 ArrayList 的结尾处(先用Add占位,再进行赋值,赋值方式仅用于修改);
.Clear()——从 ArrayList 中移除所有元素;
.Clone()——创建 ArrayList 的浅表副本,克隆时需要转换数据类型(ArrayList al1=(ArrayList)al.Clone;);
.Contains()——确定某个元素是否在 ArrayList 中(bool a = al.Contains("5"););
.IndexOf()——已重载。返回 ArrayList 或它的一部分中某个值的第一匹配项的从零开始的索引;
.Insert()——将元素插入 ArrayList 的指定索引处,可以在任意位置插入。
.Remove()——从 ArrayList 中移除特定对象的第一个匹配项;
.RemoveAt——移除 ArrayList 的指定索引处的元素;
.Sort()——已重载。对 ArrayList 或它的一部分中的元素进行排序,升序排序;
.Reverse()——翻转整个集合,由升序排序变为降序排序。

foreach(object aa in al)——al集合中有不同类型元素时,用 Object 定义一个变量来遍历集合,Object 是所有数据类型的基类,接收任何类型;
Object aa=al;——Object 类型的aa接收al(ArrayList类型)相当于把al压缩到aa里。

练习:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections; namespace _1016集合及特殊集合练习
{
class Program
{
static void Main(string[] args)
{
//定义一个集合,添加元素、插入元素、移除元素、遍历集合
ArrayList al = new ArrayList();//定义一个新的集合。集合是一个类,在System.Collections.库中,需要引用。
al.Add("祝");//向集合中加入元素,括号中为元素。
al.Add("愿");//索引号无需指定,从0号索引开始添加,添加到新的位置。
al.Add("祖");
al.Add("国");
al.Add("繁");
al.Add("荣");
al.Add("昌");
al.Add("盛");
al.Add("!");
foreach (string a in al)//遍历集合中的每一个元素,元素为string类型
{
Console.Write(a);
}
Console.WriteLine();
al.Insert(,"福");//在索引号为“1”的位置插入一个元素“福”字,其他元素依次往后排
al.Remove("愿");//移除al集合中的第一个“愿”
al.RemoveAt();//移除al集合中索引号为8的元素
foreach (string b in al)
{
Console.Write(b);
}
Console.WriteLine();
Console.ReadLine();
}
}
}

定义一个集合,添加元素、插入元素、移除元素、遍历集合

C#-集合及特殊集合——★★哈希表集合★★

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections; namespace _1016集合及特殊集合练习
{
class Program
{
static void Main(string[] args)
{
//集合中,由字符查询索引号、由索引号查询字符、获取集合的元素个数
ArrayList al = new ArrayList();
al.Add("祝");
al.Add("福");
al.Add("祖");
al.Add("国");
al.Add("繁");
al.Add("荣");
al.Add("昌");
al.Add("盛");
al.Add("!");
foreach(string s in al)
{
Console.Write(s);
}
Console.WriteLine();
int a = al.IndexOf("国");//由字符查询其索引号
Console.WriteLine(a);
string b=al[].ToString();//由索引号查询其字符
Console.WriteLine(b);
int c = al.Count;//获取集合中元素个数
Console.WriteLine(c);
Console.ReadLine();
}
}
}

由字符查询其索引号,由索引号查询其字符,获取集合中元素个数

C#-集合及特殊集合——★★哈希表集合★★

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections; namespace _1016集合及特殊集合练习
{
class Program
{
static void Main(string[] args)
{
//输入人数,录入分数,存到集合里,之后按照由高到低的顺序读取出来,并求平均分
Console.Write("请输入人数:");
int r = int.Parse(Console.ReadLine());
ArrayList al = new ArrayList();
for (int i = ; i < r; i++)
{
Console.Write("请输入第{0}个人的分数:", i + );
int f = int.Parse(Console.ReadLine());
al.Add(f);
}
al.Sort();
al.Reverse();
Console.WriteLine("分数由高到低为:");
foreach (int j in al)
{
Console.Write(j + "\t");
}
Console.WriteLine();
double sum = ;
for (int k = ; k < r; k++)
{
sum += double.Parse(al[k].ToString());
}
double avg = sum / r;
Console.WriteLine("平均分为:" + avg);
Console.ReadLine();
}
}
}

输入人数,录入分数,存到集合里,之后按照由高到低的顺序读取出来,并求平均分

C#-集合及特殊集合——★★哈希表集合★★

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections; namespace _1016集合及特殊集合练习
{
class Program
{
static void Main(string[] args)
{
//创建新的集合,并将之前的集合中的数据复制到新的集合,并判断集合中是否有某一数据
ArrayList al = new ArrayList();
al.Add("祝");
al.Add("福");
al.Add("祖");
al.Add("国");
al.Add("繁");
al.Add("荣");
al.Add("昌");
al.Add("盛");
al.Add("!");
ArrayList xal = new ArrayList();
xal = (ArrayList)al.Clone();
bool a = xal.Contains("荣");
Console.WriteLine(a);
Console.ReadLine();
}
}
}

创建新的集合,并将之前的集合中的数据复制到新的集合,并判断集合中是否有某一数据

C#-集合及特殊集合——★★哈希表集合★★

二、Stack 栈集合
栈集合:Stack(英文翻译为干草堆),元素先进后出,一个一个赋值,一个一个取值,按顺序。
属性和方法:
.Count——获取集合中元素的个数;
.Push()——将元素一个一个推入集合中,一次只能推一个;
.Peek()——查看集合中的元素,不弹出元素,元素个数不变;
.Pop()——查看并弹出集合中的元素,元素个数减少;
.Clear()——清空集合。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections; namespace _1016集合及特殊集合练习
{
class Program
{
static void Main(string[] args)
{
//栈集合加入元素、移除元素、查看元素、获取元素个数
Stack st = new Stack();
st.Push("祝");//添加元素时用“push”,将元素推进stack集合中
st.Push("福");
st.Push("祖");
st.Push("国");
st.Push("繁");
st.Push("荣");
st.Push("昌");
st.Push("盛");
st.Push("!");
foreach (string a in st)
{
Console.Write(a);//栈集合元素先进后出,所以打遍历集合时,顺序为倒序
}
Console.WriteLine();
int h = st.Count;
Console.WriteLine("此时集合中元素的个数为:"+h);
string y = st.Pop().ToString();
string c = st.Peek().ToString();
Console.WriteLine("移除的元素为:" + y);
Console.WriteLine("第一个元素为:" + c);
int g = st.Count;
Console.WriteLine("此时集合中元素的个数为:" + g);
Console.ReadLine();
}
}
}

栈集合加入元素、移除元素、查看元素、获取元素个数

C#-集合及特殊集合——★★哈希表集合★★

三、Queue 队列集合

元素先进先出,一个一个的赋值一个一个的取值,按照顺序。此集合没有索引,先进的先出。
属性和方法:
.Count——获取集合中元素的个数;
.Enqueue()——将元素加入队列集合;
.DEqueue()——将元素从队列集合中移除,从头开始删除,不需要参数;
.Clear()——清空列表。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections; namespace _1016集合及特殊集合练习
{
class Program
{
static void Main(string[] args)
{
//队列集合加入元素、移除元素、查看元素、获取元素个数
Queue st = new Queue();
st.Enqueue("祝");//添加元素时用“Enqueue”,将元素加入queue集合中
st.Enqueue("福");
st.Enqueue("祖");
st.Enqueue("国");
st.Enqueue("繁");
st.Enqueue("荣");
st.Enqueue("昌");
st.Enqueue("盛");
st.Enqueue("!");
foreach (string a in st)
{
Console.Write(a);//栈集合元素先进先出,所以打遍历集合时,顺序为正序
}
Console.WriteLine();
int h = st.Count;
Console.WriteLine("此时集合中元素的个数为:" + h);
string y = st.Dequeue().ToString();
string c = st.Peek().ToString();
Console.WriteLine("移除的元素为:" + y);
Console.WriteLine("第一个元素为:" + c);
int g = st.Count;
Console.WriteLine("此时集合中元素的个数为:" + g);
Console.ReadLine();
}
}
}

队列集合加入元素、移除元素、查看元素、获取元素个数

C#-集合及特殊集合——★★哈希表集合★★

四、Hashtable 哈希表集合
元素先进后出,一个一个的赋值,但只能一起取值。
属性和方法:
.Add(,)——添加key(主键)和元素;
.Remove()——移除括号内的元素;
.Contains()——判断集合中是否有括号内的元素;
.Count()——计算集合中元素的个数。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections; namespace _1016集合及特殊集合练习
{
class Program
{
static void Main(string[] args)
{
//Hashtable 哈希表集合加入元素、移除元素、判断是否包含指定元素、获取元素个数
Hashtable ht = new Hashtable();
ht.Add(,"祝");//哈希表集合插入时add(0,"祝")中,0为索引号,祝为添加的元素
ht.Add(,"福");
ht.Add(,"祖");
ht.Add(,"国");
ht.Add(,"繁");
ht.Add(,"荣");
ht.Add(,"昌");
ht.Add(,"盛");
ht.Add(,"!");
foreach(int i in ht.Keys)//Keys为key的集合
{
Console.Write(i+" ");
}
Console.WriteLine();
foreach(string j in ht.Values)//Values为元素的集合
{
Console.Write(j);
}
Console.WriteLine();
Console.WriteLine("集合中元素个数为:"+ht.Count);
ht.Remove();//ht.Remove("繁");——错误,只能移除索引号,无法移除元素
ht.Remove();
foreach (int k in ht.Keys)//Keys为key的集合
{
Console.Write(k + " ");
}
Console.WriteLine();
foreach (string l in ht.Values)//Values为元素的集合
{
Console.Write(l);
}
Console.WriteLine();
Console.WriteLine("集合中元素个数为:" + ht.Count);
bool sf = ht.Contains("繁");
Console.WriteLine(sf);
//若执行清空语句,则前面的输入内容都不再显示
//Console.Clear();//清空集合元素语句
//Console.WriteLine("清空集合后,元素个数为:"+ht.Count);
Console.ReadLine();
}
}
}

Hashtable 哈希表集合加入元素、移除元素、判断是否包含指定元素、获取元素个数、清空集合

C#-集合及特殊集合——★★哈希表集合★★