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>构造普通哈希表 代码 ...
随机推荐
- ant的hello world很好的官方文档[z]
http://ant.apache.org/manual/tutorial-HelloWorldWithAnt.html
- pl/sql登录时,数据库下拉框没有任何内容
打开plsql时突然发现database下拉框里面没有任何配置信息,如下图: 解决方法: 找到环境变量TNS_ADMIN,修改存放tnsnames.ora的路径:
- eclipse中的.project 和 .classpath文件的具体作用(综合):
.project是项目文件,项目的结构都在其中定义,比如lib的位置,src的位置,classes的位置 .classpath的位置定义了你这个项目在编译时所使用的$CLASSPATH 这些文件你用文 ...
- MicroRNA in Control of Gene Expression: An Overview of Nuclear Functions 微RNA控制基因表达:核功能概述
MicroRNA in Control of Gene Expression:An Overview of Nuclear Functions微RNA控制基因表达:核功能概述 抽象:小的非编码RNA( ...
- [Selenium] 怎样判断是否适合自动化测试
实施自动化测试前需要对软件开发过程进行分析,以观察其是否适合使用自动化测试.通常需要满足以下条件: 1)需求变动不频繁 2)项目周期足够长 3)自动化测试脚本可重复使用 4)手工测试无法完成或者需要大 ...
- Text Relatives
[Text Relatives] With TextKit the resources at your disposal range from framework objects—such as te ...
- 微信小程序 tp5上传图片
test.wxml页面 <view class="title">请选择要反馈的问题</view> <view> <picker bindc ...
- 报表导出jxls的使用笔记
基于poi的jxls工具的使用:1.依赖: <dependency> <groupId>org.jxls</groupId> <artifactId>j ...
- 搭建自己的 Docker 私有仓库服务
关于 Docker 的介绍这里就省了,Docker 在其相关领域的火爆程度不亚于今年汽车行业里的特斯拉,docCloud 甚至把公司名都改成了 Docker, Inc. 好东西总是传播很快,我们现在已 ...
- Ubuntu 安装java 1.8
1.下载java 1.8 地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.ht ...