【C#】之 集合

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/molihuakai_118/article/details/81876177

#一、ArrayList
  对于普通的数组,在声明时需指定其类型,每一种数组只能对应一种类型,并且数组顺序需按小到大排序。如果想要随便的在任意一个数组中放各种类型的数据,并且不确定放多少个,这时就用到了ArrayList集合——动态数组。
##1、声明方法
  Array List 数组名 =new ArrayList(); //要先导入命名空间 using system.collections.
##2、常用方法

添加数据:

ArrayList.add(数据值);   //不是通过下标添加数据,但利用下标可以重新赋值
ArrayList.addrange(数组名) ; 可直接添加数组并显示出来
ArrayList 数组名 = new ArrayList(构造函数);//通过构造函数的形式在集合中放一个数组并能直接显示出来

利用下标重新赋值:ArrayList[0]=数据值;

在某一个下标位置插入一个值:ArrayList.insert(i,i+1);

判断集合中是否包含这个元素:arraylist.contains(i);

清空:ArrayList.clear();

集合中元素的个数:int num =arraylist.count;

##3、举例
  若集合中某个元素存的是数组或者是一个类,可通过循环判定显示。

int[] nums = new int[] { 1, 3, 4, 4, 5 };
ArrayList arraylist = new ArrayList () ; //声明集合
//在集合中添加数据
arraylist.Add  ("xiaohong");
arraylist.Add(89.256);
arraylist.Add(890);
arraylist.Add(true);
arraylist.Add(3.23m);            
arraylist.Add(nums);//添加一个数组
		
person p = new person("小杨", 19, '男');//添加一个类
arraylist.Add(p);
						
arraylist[5] = 12; //改变下标为5的元素的值
		
//将数组类型的数据和类显示出来
for (int i = 0; i < arraylist .Count ; i++)
{
	 if (arraylist [i] is int[]) //判断ArrayList的第i个元素是否能够转化成int类型数组
	{
		int[] numbers = (int[])arraylist[i]; //定义一个int类型的数组number,赋值为ArrayList集合中第i个元素强制转换的结果
		for (int j = 0; j  < numbers .Length ; j++)
		{
		      Console.WriteLine(numbers[j]);
		}
	}
	 else if (arraylist [i ] is  person )  //判断ArrayList的第i个元素是否能够转换成 person这个类
	{
		((person)arraylist[i]).say();
	}
	else
	{
		Console.WriteLine(arraylist[i]);
	}
}
 Console.ReadKey();

#二、List<T>
泛型集合,是为了专门处理某种类型,ArrayList对应的是list<类型名>,在尖括号中写什么类型,这个集合就变成了什么类型的集合。添加数据、插入数据、索引访问数据都是这个类型的,不用考虑所有的转化问题。使用时不用导入命名空间。

//随机的往这个list集合中添加十个数字,不能重复,求和,求最大值,最小值平均值
 List<int> list = new List<int>();
Random r = new Random();
int num = 0;
while (list.Count !=10)
{
	num = r.Next(1, 100);
	if (!list.Contains(num)) 
	{
		list.Add(num);
	}
}
Console.WriteLine("最大值为{0}最小值为{1}和为{2}平均值为{3}", list.Max(), list.Min(), list.Sum(), list.Average());
 Console.ReadKey();

#三、字典 dictionary
  存储数据的另一种形式,与哈希表很像,存在键值对,但在使用时不用导入命名空间。

Dictionary<string, string> dic = new Dictionary<string, string>();//使用声明			            dic.Add("老苏", "凤姐");
dic.Add("老牛", "芙蓉");
dic.Add("老马", "春哥");
dic.Add("老虎", "月月");
foreach (var item in dic.Keys )//遍历字典
{
	 Console.WriteLine("key----{0},value-----{1}", item, dic[item]);
}
Console.ReadKey();

#四、哈希表

  也就是我们在数据结构导论中所学的散列函数,是根据关键码值(Key value)而直接进行访问的数据结构。它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。

##1、要点

1、以键值对的形式存在  key  ——键,value——值,键值对均是object类型
2、键值对中的键就是为了找数据用的,必须提供,不允许重复
3、使用键作为寻找方式是一种无序的结构
4、转换使用里式转换原则
5、使用前导入命名空间using system.collections 
6、存储的数据不限制什么类型

##2、foreach循环

Hashtable ht = new Hashtable();	            
ht.Add("老苏", "1001");
ht.Add("小马", "1002");
ht.Add("小杨", "1003");
ht.Add("1004", "小赵");
ht.Add(new person("小赵",19,'男'),1005);
	
foreach (var str in ht.Keys ) //foreach循环可以遍历整个哈希表 str为对应的键,ht.keys为键所对应的值
{
	 Console.WriteLine("key{0},---------value{1}", str, ht[str]);
}
Console.WriteLine("添加成功了");
Console.ReadKey();

#五、几种集合的区别
这里写图片描述

猜你喜欢

转载自blog.csdn.net/molihuakai_118/article/details/81876177