1、ArrayList集合
1.1、给集合中添加
1、Add(给集合添加单个元素)添加数据很好添加,但是如果添加类,显示类只能显示类的命名空间,而不能显示类的方法,由于ArrayList是一个集合因此在访问是用索引来访问,因此用list[i]来表示每一个数据的位置,但是list[i]为object类型,想要利用数据必须使用数据的强制转换。
static void Main(string[] args)
{
ArrayList list = new ArrayList();
list.Add(1);
list.Add(10.5);
list.Add(true);
list.Add("张三");
Person p = new Person();
list.Add(p);
list.Add(new int[] { 1, 2, 3, 4, 5 });
list.Add(list);
for(int i=0;i<list.Count;i++)
{
Console.WriteLine(list[i]);
}
Console.ReadKey();
}
}
public class Person
{
public void SayHello()
{
Console.WriteLine("我是人类");
}
}
如果想显示类的方法就要用is和强制转换
static void Main(string[] args)
{
ArrayList list = new ArrayList();
list.Add(1);
list.Add(10.5);
list.Add(true);
list.Add("张三");
Person p = new Person();
list.Add(p);
list.Add(new int[] { 1, 2, 3, 4, 5 });
list.Add(list);
list.AddRange(list);
for(int i=0;i<list.Count;i++)
{
if(list[i] is Person)
{
((Person)list[i]).SayHello();
}
else if(list[i] is int[])
{
for(int j=0;j<((int[])list[i]).Length;j++)
{
Console.WriteLine(((int[])list[i])[j]);
}
}
else if(list[i] is ArrayList)
{
}
else
{
Console.WriteLine(list[i]);
}
}
Console.ReadKey();
}
}
public class Person
{
public void SayHello()
{
Console.WriteLine("我是人类");
}
}
2、AddRange(给集合添加集合)
static void Main(string[] args)
{
ArrayList list = new ArrayList();
list.AddRange(new int[] { 1, 2, 3, 4, 5 });
list.AddRange(new string[] { "张三", "李四" });
list.AddRange(list);
for(int i=0;i<list.Count;i++)
{
Console.WriteLine(list[i]);
}
Console.ReadKey();
}
1.2 删除集合中的元素
1、Clear删除集合中所有的元素
2、Remove删除集合中指定的元素
3、RemoveAt根据索引来删除元素,注意在给集合添加集合时,其索引下标并不是整体,而是集合内的元素
例如:
list.Add(1);
list.Add(true);
list.AddRange(new int[]{1,2,3,4,5,6});
1为[0],true为[1],{1}为[2],{2}为[3]…
那么List.RemoveAt(2);就是删除{1}
4、RemoveRange删除集合
1.3 向集合中插入
1、Insert插入单个元素:list.Insert(1,“我是新来的”);
2、InsertRange插入一个集合:list.InsertRange(0,new string[]{"娃哈哈 ",“科比”,“林书豪”});
1.4 升序排列
Sort
数据必须是同一类型的比较
例如:
list.Add(1);
list.Add(5);
list.Add(3);
list.Sort();
1.5 判断是否包含某个元素
Contains:
list.Contains(Number)
1.6 练习题
(1)向ArrayList集合中添加一个整数类型的数组,求集合中的最大值最小值总和平均数
static void Main(string[] args)
{
ArrayList list = new ArrayList();
list.AddRange(new int[] { 1, 2, 3, 4, 5 });
int max = (int)list[0];
int min = (int)list[0];
int sum = 0;
for (int i = 0; i < list.Count; i++)
{
sum += (int)list[i];
if ((int)list[i]>max)
{
max = (int)list[i];
}
if((int)list[i]<min)
{
min = (int)list[i];
}
}
Console.WriteLine("最大值为{0},最小值为{1},总和为{2},平均值为{3}", max, min, sum, sum / list.Count);
Console.ReadKey();
}
(2)写一个长度为10的集合,要求在里面随机的存放10个数字(0—9),
但是要求里面所有的数字不重复。
static void Main(string[] args)
{
//写一个长度为10的集合,要求在里面随机的存放10个数字(0—9),
//但是要求里面所有的数字不重复。
ArrayList list = new ArrayList();
Random r = new Random();
//不用先创建一个集合,往list中添加数据就相当于创建集合了
for(int i=0;i<10;i++)
{
int Number = r.Next(0, 10);
if(!list.Contains(Number))
{
list.Add(Number);
}
else
{
i--;//当包含同样的数字时,就i--,是i永远小于10,直到
//不包含同样的数字时i=10,退出循环
}
}
for(int i=0;i<list.Count;i++)
{
Console.WriteLine(list[i]);
}
Console.ReadKey();
}
1.7集合的长度
1、数组的长度不可以改变,集合的长度可以任意的改变。
2、两个属性
(1)Count :集合中实际包含的元素个数
(2)Capcity:集合中可以包含的元素个数
list.Add(0)
list.Add(0)
list.Add(0)
list.Add(0)此时开辟了四块空间
若再添加一个数据
list.Add(0)
list.Add(0)
list.Add(0)
list.Add(0)
list.Add(0)此时就开辟了八块空间 ,意思是原来的四块空间以占满,在添加一个数据的话就要再开辟四块空间,当新开辟的空间再一次占满时,再添加一个数据就会再开辟四块空间。
1.8 集合与数组的比较
1、集合
集合相对于数组的好处
1)、长度可变
2)、可以添加任意类型的元素
不好的地方:
从集合中取值的时候必须要不停的做类型转换
2、Hashtable集合
2.1 Hashtable概念
(1)一般称Hashtable为键值对集合或字典,即根据键来找值
(2)创建键值对对象的代码:Hashtable ht=new Hashtable();
(3)在键值对集合中,键一定是唯一的,不能重复的,而值是可以重复的。
2.2 赋值与输出
(1)用这种方法添加,如果键相同则抛异常
ht.Add(键,值);
ht.Add(1,“张三”);
ht.Add(‘c’,true);
ht.Add(3.14,100);
用这种方法添加,如果键相同则替换值,如果键不同,则添加一个新值,不会抛异常。
ht[5]=“李四”;
ht[1]=“王五”;
(2)单一输出:
Conso.WriteLine(ht[键]);
Conso.WriteLine(ht[1]);
Conso.WriteLine(ht[‘c’]);
Conso.WriteLine(ht[3.14]);
(3)循环输出:
foreach(var(循环的每一项的类型) item(代表集合中的每一项) in ht.keys(要循环的集合))
{
Console.WriLine(“键-------{0},值--------{1}”,item,ht[item]);
}
(4)C#是一门强类型语言,就是对变量的类型必须有一个明确的定义
弱类型语言:例如javascript,对变量的类型不需要有一个明确的定义
(5)var可以通过变量的值来推断出来这个变量的类型。
缺点:用var声明变量是要求必须要给变量赋予初值,但是在很多情况下我们声明变量不一定要给其赋值
2.3 方法
(1)ht.Containskey判断集合中是否包含指定的键
(2)ht.ContainsValue判断集合中是否包含指定的值
(3)ht.Remove根据键来删除数据
2.4 简繁转换
根据用户输入的简体我们将其输出一个繁体
简体: private const String Jian = “啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺”
繁体:private const String Fan = “啊阿埃挨哎唉哀皚癌藹矮艾礙愛隘鞍氨咹俺按暗岸胺”
static void Main(string[] args)
{
Hashtable hs = new Hashtable();
for(int i=0;i<Jian.Length;i++)
{
hs.Add(Jian[i],Fan[i]);
}
Console.WriteLine("请输入字符串");
string input = Console.ReadLine();
for(int j=0;j<input.Length;j++)
{
if(hs.ContainsKey(input[j]))
{
Console.Write(hs[input[j]]);
}
else
{
Console.Write(input[j]);
}
}
Console.ReadKey();
}