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();
}
}
}
定义一个集合,添加元素、插入元素、移除元素、遍历集合
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();
}
}
}
由字符查询其索引号,由索引号查询其字符,获取集合中元素个数
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();
}
}
}
输入人数,录入分数,存到集合里,之后按照由高到低的顺序读取出来,并求平均分
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();
}
}
}
创建新的集合,并将之前的集合中的数据复制到新的集合,并判断集合中是否有某一数据
二、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();
}
}
}
栈集合加入元素、移除元素、查看元素、获取元素个数
三、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();
}
}
}
队列集合加入元素、移除元素、查看元素、获取元素个数
四、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#-集合及特殊集合——★★哈希表集合★★的更多相关文章
- C#部分---特殊集合:stack栈集合、queue队列集合、哈希表集合。
1.stack栈集合:又名 干草堆集合 栈集合 特点:(1)一个一个赋值 一个一个取值(2)先进后出实例化 初始化 Stack st = new Stack(); //添加元素用push st.Pus ...
- c# 哈希表集合;函数
* 哈希表集合 1.先进去的后出来,最后进去的先出来 2.利用枚举类型打印出集合中的Key值和Value值 ** 函数 1.函数:能够独立完成某项功能的模块. 函数四要素:输入.输出.函数体.函数名 ...
- Java集合(八)哈希表及哈希函数的实现方式
Java集合(八)哈希表及哈希函数的实现方式 一.哈希表 非哈希表的特点:关键字在表中的位置和它之间不存在一个确定的关系,查找的过程为给定值一次和各个关键字进行比较,查找的效率取决于和给定值进行比较的 ...
- 【JVM虚拟机】(8)--深入理解Class中--方法、属性表集合
#[JVM虚拟机](8)--深入理解Class中--方法.属性表集合 之前有关class文件已经写了两篇博客: 1.[JVM虚拟机](5)---深入理解JVM-Class中常量池 2.[JVM虚拟机] ...
- c# 哈希表跟函数
一.哈希表集合 先进后出,一个一个赋值,但只能一起取值. 1.哈希表的建立.赋值以及读取. 2.利用枚举类型打印出集合中的Key值和Value值. 二.函数 函数:能够独立完成某项功能的模块. 函数四 ...
- 04.python哈希表
python哈希表 集合Set 集合,简称集.由任意个元素构成的集体.高级语言都实现了这个非常重要的数据结构类型. Python中,它是可变的.无序的.不重复的元素的集合. 初始化 set() -&g ...
- 11、C#基础整理(特殊集合和哈希表)
特殊集合:队列.栈 一.栈Stack类:先进后出,没有索引 Stack ss = new Stack(); 1.增加数据:push :将元素推入集合 ss.Push(); ss.Push(); ss. ...
- Stack集合 Queue队列集合 Hashtable哈希表
Stack集合 干草堆集合 栈集合 栈;stack,先进后出,一个一个赋值,一个一个取值,安装顺序来. 属性和方法 实例化 初始化 Stack st = new Stack(); 添加元素 个数 Co ...
- 集合>哈希表类Hashtable和SortedList排序列表类
集合>哈希表类Hashtable Hashtable一种键值对的集合 ,哈希表内部的排列是无序的,而且哈希表没有提供排序方法. 集合>哈希表类Hashtable>构造普通哈希表 代码 ...
随机推荐
- 37-python中bs4获取的标签中如何提取子标签
如果只是要提取一个标签 里面的属性值啥的,直接看这篇文章就可以了: 23-python用BeautifulSoup用抓取a标签内所有数据 如果是标签的嵌套,可以参考下面的思路,虽然不是很简洁,但是可以 ...
- YUI前端优化之内容篇
Excetional Performance团队总结出了一系列可以提高网站速度的方法.可以分为7大类34条.包括内容.服务器.cookie.CSS.JavaScript.图片.移动应用等七部分.一.内 ...
- Java 设计模式系列(十三)模板方法
Java 设计模式系列(十三)模板方法 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的 ...
- etl业务说明图
- 转 Spring AOP @Before @Around @After 等 advice 的执行顺序
转自:http://blog.csdn.net/rainbow702/article/details/52185827 情况一: 一个方法只被一个Aspect类拦截 正常情况: 异常情况: 情况二 ...
- TP5 通过shell建立PHP守护程序
用 vim建立 /etc/init.d/keepalive文件 #!/bin/bash # chkconfig: 2345 10 90 # description: Start and Stop KE ...
- .NET基础 (18)特性
特性1 什么是特性,如何自定义一个特性2 .NET中特性可以在哪些元素上使用3 有哪几种方法可以获知一个元素是否申明某个特性4 一个元素是否可以重复申明同一个特性 特性1 什么是特性,如何自定义一个特 ...
- TCP的几个状态(SYN/FIN/ACK/PSH/RST)
在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG. 其中,对于我们日常的分析有用的就是前面的五个字段. 含义: SYN 表示建立连接, ...
- .NET框架源码解读之启动CLR
前面提到在SSCLI环境里运行.NET程序的时候,执行的命令类似java程序的执行过程,即通过clix程序解释执行.net程序.这个过程看起来跟在windows环境下执行.net程序表面上看起来不一样 ...
- Android优化之内存优化倒计时篇
本文来自网易云社区 作者:聂雷震 本篇文章介绍的内容是如何在安卓手机上实现高效的倒计时效果,这个高效有两个标准:1.刷新频率足够高,让用户觉得这个倒计时的确是倒计时,而不是幻灯片:2.不能占用太多的内 ...