C# List泛型集合、拆箱和装箱、字典集合
1.List泛型集合
1.创建泛型集合对象,List集合和ArrayList集合不同的是,ArrayList里面的类型任意,而List在创建的时候就已经规定好了类型。List的常用方法可参考前面ArrayList集合,这里不过多阐述。
List<int> list = new List<int>();
2.List泛型集合可以转换为数组
List<int> list = new List<int>();
list.Add(1);
list.Add(2);
list.AddRange(list);
list.AddRange(new int[] { 1, 2, 3, 4 });
//List泛型集合可以转换为数组
int[] nums= list.ToArray();
//数组也可以转换成集合
List<int> list1= nums.ToList();
2.装箱和拆箱
1.装箱:就是将值类型转换为引用类型。
2.拆箱:将引用类型转换为值类型
int n=10;
object o=n;//装箱
int n1=(int)o;//拆箱
3.装箱浪费时间,代码中应尽量避免装箱和拆箱。
ArrayList arrayList = new ArrayList();
for (int i = 0; i < 100000; i++)
{
arrayList.Add(i);//这个循环发生了10万次的装箱
}
4.看两种类型是否发生了装箱或者拆箱,要看这两种类型是否存在继承关系。
string str="123";
int n=Convert.ToInt32(str);
3.字典集合
字典集合类似于前面提到的哈希表,这里举一个例子:
//字典集合
Dictionary<int, string> dict = new Dictionary<int, string>();
dict.Add(1, "张三");
dict.Add(2, "李四");
dict.Add(3, "王五");
//dict.Add(1, "新来的");因为前面已经有一个键是1,所有会报异常。正确的写法如下:
dict[1] = "新来的";
//遍历集合中的值
//第一种方法
//foreach (var item in dict.Keys)
//{
// Console.WriteLine("{0}----{1}", item, dict[item]);
//}
//Console.ReadKey();
//第二种方法
foreach (KeyValuePair<int,string > item in dict)
{
Console.WriteLine("{0}---{1}",item.Key,item.Value);
}
Console.ReadKey();
4.练习
1.提示用户输入字符串,通过foreach循环将用户输入的字符串赋值给一个字符数组
Console.WriteLine("请输入一个字符串");
string str = Console.ReadLine();
char[] chars = new char[str.Length];
int i = 0;
foreach (var item in str)
{
chars[i] = item;
i++;
}
foreach (var item in chars)
{
Console.WriteLine(item);
}
Console.ReadKey();
2.统计Welcome to china中每个字符出现的字数,不考虑大小写
string str = "Welcome to China";
//字符------>出现的次数
//键---------->值
Dictionary<char, int> dic = new Dictionary<char, int>();
for (int i = 0; i < str.Length; i++)
{
if (str[i]==' ')
{
continue;
}
if (dic.ContainsKey(str[i]))
{
dic[str[i]]++;
}
else {
dic[str[i]] = 1;
}
}
foreach (KeyValuePair<char,int> item in dic)
{
Console.WriteLine("键是{0},值是{1}", item.Key,item.Value);
}
Console.ReadKey();