复习:
1.什么是垃圾回收:
.net 应用程序作为一个托管的运行机制,CLR里面有一个极其重要的部分,就是垃圾回收;即 动态的管理内存;
2.什么时候回收:
新建对象为 0代
0代 满了就回收一次 没用的内存被回收,有用的变成1代,而且0代变为空,可以继续装;
同样 1代 满了会再回收一次,2代满了就报异常
即: 代满即会回收
3.字符串什么时候使用 string.方法,什么时候str.方法:
string.方法: 该方法是静态方法,是共有的;
str.方法: 该方法为实例方法,是私有的;
3.字符串的 == 符号是怎么回事儿:
char[] chs = { 'a','b','c' };
string str1 = new string(chs);
string str2 = new string(chs);
bool isRight = str1 == str2;
返回 isRight = true;
此处涉及到运算符重载
只要是字符串的内容或地址有一个相同,返回 true ;
==================================================================
本堂内容:
1. 集合综述
01.课前小问题:
1.有一数组,如果插入一个数据,或追加一个数据怎么做?
2.这个数组如果要删除一个数据,怎么做?
以先前的知识很难解决这两个问题
02. 集合的定义:
集合就是一个动态的数组
03. 集合分类:
ArrayList, Hashtable
2. ArrayList集合的使用
i 引入命名空间:
using System.Collections
ii new 对象
iii 增删改查
ArrayList list = new ArrayList();
01.增
从尾部添加
list.Add("love");
lise.Add(2);
list.Add("你好");
也可:list.Add(list);
即将自身数据重新加入进去;
添加一批数据
liat.AddRange(ICollection);
添加数组
Int[]nums={122,334,3234,56,43};
list.AddRange(nums);
插入
list.Insert(int index,object value );
list.Insert(1,"嘿嘿");
插入一批数据
list.InsertRange(int index,ICollection);
02.删
ArrayList list = new ArrayList();
int[]nums={122,334,3234,56,43};
list.AddRange(nums);
RemovAt:删除指定“下标”的数据
不得超出索引范围
list.RemoveAt(int index);
list.RemoveAt(2);
Remove 删除指定数据
list.Remove(object value);
list.Remove(122);
RmoveRange 删除一批数据
list.RemoveRange(int index, int count);
list.RemoveRange(3,2);
03.改
ArrayList list = new ArrayList();
int[]nums = {1,2,3,4,5,6,5,4,3};
list.AddRange(nums);
list[0] = "我";
即将 1 改为了 我
04.查
Contains 查看是否包含目标对象
list.Contains();
IndexOf
list.IndexOf(object value);
list.IndexOf(object value, int startIndex);
list.IndexOfRange();
05.注意细节
Remove 为什么在找不到目标对象是 不报错?
Remove 在执行前调用了IndexOf,
RemoveAt 在index超出 索引范围会报错
06.ToArray 将集合转为数组
string[]str = (string[])list.ToArray(typeof(string));
ToArray 方法可以将ArrayList 变成数组
但是 是object类型的数组(object[]);
ToArray有一个重载,里面可以放置类型,表示转换成什么类型的数组
由于string[]是一个类型的声明,不是变量,而方法中的参数需要一个变量,利用typeof运算符,获得类型的对应变量(typeof(类型名));
考虑到多态,需要将数据全部转化为数组,所以ToArray方法返回一个Array类型,Array类型是所有数组的父类,那么就通用了,因为可以使用里氏转换原则 进行转换
ArrayList list = new ArrayList();
int[]nums = {1,2,3,4,5,6,5,4,3};
list.AddRange(nums);
// 一般使用都是数组,处理都是集合
(方法1)object[]os = list.ToArray();
for (int i = 0; i < os.Length; i++)
{
ConSole.WriteLine((int)os[i] + 1);
}
方法怎么知道变成什么类型
由于可以变成多个类型,如何实现统一定义(调用)
(方法2)int[] nums1=(int[])list.ToArray(typeof( int));
for(int i=0; i<nums1.Length; i++)
{
ConSole.WriteLine(nums1[i]);
}
---------------------------------------------------------------------------------------------------------------------------
3. Hashtable的使用
01. 小问题:
i 存储学生的信息:姓名和电话
ii 从100万名学生找到某一个学生(张三);
02. 特点及目的:
Hashtable 的存在就是为了实现快速的在存储数据中找到某个数据;
Hashtable 是散列集,无顺序可言
03. 用法:
1. 引用命名空间
using System.Collections
2. new 一个 Hashtable
Hashtable table = new Hashtable();
3. 增删改查
04. 增
只有Add方法
table.Add(object key, object value);
table.Add("张三", "123344556");
table.Add("李四", "334566765");
table.Add("Lucy", "122312122");
05. 删
Remove
table.Remove(object key);
tble.Remove("Lucy");
06. 改
通过索引改
table[object key] = object value;
table["Lucy"] = 10010;
07. 查
table.Containskey(object key);
table.Containsvalue(object value);
table.Contains(object key);
bool Isright = table.Containskey("张三");
08. 补充
1. 方法
table.Clear();
2. 如何遍历
专门用来遍历Hashtable的语法:
foreach(object item in 集合名)
{
使用item
}
实例:
001. 遍历 键
foreach(object item in table.keys)
{
ConSole.WriteLine(item);
}
002. 遍历值
foreach(object item in table.values)
{
ConSole.WriteLine(item);
}
003. 遍历键和值
foreach(DictionaryEntry item in table)
{
ConSole.WriteLine(item.key+" "+item.Value);
}
4. 泛型集合
01. 作用
就是解决object类型对类型处理的繁琐
处理数据,一般都是单一类型
02. 使用
怎么使用泛型,有哪些泛型要掌握
ArrayList ---- List
Hashtable ---- Dictionary
使用方法:
1.不用引用命名空间,所有泛型集合都在System.Collections.Generic;
2.创建对象:
需要指定类型
3.与其他集合用法一致
03. List
List<int> numList = new List<int>();
List<string> strList = new List<string>();
……
尖括号中可以是自定义类型
04. Dictionary
Dictionary<string,int>dir=new Dictionary<string,int>();
---------------------------------------------------------------------------------------------------------------------------
5. 文件File
01 path
path 是一个静态类
常见方法:
-> ChangeExtension()
-> Combine()
-> GetDirectoryName()
-> GetExtension()
-> GetFileName()
-> GetFileNameWithoutExtension()
-> GetFullPath()
-> GetPathRoot()
-> GetRandomFileName()
-> GetTempFileName()
-> GetTempPath()
-> HasExtension()
-> IsPathRooted()
02.FileStream
FileStream file = new FileStream(@"G:\1.txt",FileMode.open,FileAcess.Read);
temp = file.ReadByte();
ConSole.WriteLine(temp);
练习
01. 素数(从1到100)
02. I love you --> uoy evol I
03. 工厂复习
04. 将集合转化为数组
05. winform 微博输入框
作业:
案例:把分拣奇偶数的程序用泛型实现。List<int>
练习1:将int数组中的奇数放到一个新的int数组中返回。
练习2:从一个整数的List<int> 中取出最大数(找最大值)。别用max方法。
练习:把123转换为:壹贰叁。Dictionary<char,char>
练习:计算字符串中每种字符出现的次数(面试题)。 “Welcome to Chinaworld”,不区分大小写,打印“W2”“e 2”“o 3”……
提示:Dictionary<char,int>,char的很多静态方法。char.IsLetter()
案例:简繁体转换 。Dictionary。
课下练习:英汉翻译。WinForm做。发英汉词典txt。
课下练习:火星文翻译器。发字库。(作业。)
浙公网安备 33010602011771号