版权声明:本文为博主原创文章,未经博主允许不得转载。 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();
#五、几种集合的区别