哎呀我去,昨天搞那个全排列和寻路算法搞得我脑袋都大了,忘写博了,唉 ,早起补上。。。。。。。
今天的东西挺多,但没什么难度。
集合:创建和管理相关对象组的第⼆种⽅式就是:创建对象集合。
集合提供⼀种灵活的处理⽅法。 与数组不同,处理的对
象组可根据程序更改的需要动态地增⻓和收缩。 对于某
些集合,您可以为放⼊该集合的任何对象分配⼀个“键”,
以便使⽤该键快速检索对象。
注意: 集合是类,因此必须声明新集合后,才能向该集合
中添加元素。集合分为两种类型: ⾮泛型集合和泛型集合。
使⽤⾮泛型集合的 需引⼊: System.Collections命名空间。
使⽤泛型集合需引⼊: System.Collections.Generic命名
空间。
stack:Stack称为栈,栈和队列⾮常相似,只不过队列是先进
先出,⽽栈中的数据添加和移除都在⼀端进⾏,遵守栈
中的数据则后进先出。 Stack类实现了ICollection和
IEnumerable接⼝。 定义如下:
Stack stack = new Stack(); Stack<int> stackInt = new Stack<int>();
Push() 将对象插⼊Stack的顶部。(⼊栈操作)
Pop() 移除并返回Stack顶部的对象 。(出栈操作)
Peek() 返回位于Stack顶部的对象,但不移除。
Contains() 确定某元素是否在Stack中。
Clear() 从Stack中移除所有对象。
Count 获取Stack中包含的元素。
1.后进先出( LIFO)的⼀种数据结构。
2.随着向 Stack 中添加元素,容量通过重新分配按需⾃动
增加。
3.Stack 接受 null 作为有效值并且允许重复的元素。
Queue:Queue称为队列,队列是这样⼀种数据结构,数据有列
表的⼀端插⼊,并由列表的另⼀端移除。就像单⾏道,
只能从⼀段进,从⼀端出。 Queue类同样也是实现了
ICollection和IEnumerable接⼝。
Queue queue = new Queue(); Queue<string> queueString = new Queue<string>();
Enqueue() 将对象添加到 Queue 的结尾处。
Dequeue() 移除并返回位于 Queue 开始处的对象。
Peek() 返回位于 Queue 开始处的对象但不将其移除。
Clear() 从 Queue 中移除所有对象。
Contains() 确定某元素是否在 Queue 中。
Count 获取 Queue 中包含的元素数。
1.先进先出( FIFO)的⼀种数据结构。
2.随着向Queue 中添加元素,容量通过重新分配按需⾃动增加。 可通过调⽤ TrimToSize 来减少容量。
3.Stack 接受 null 作为有效值并且允许重复的元素。
4.在AI寻路算法中经常⽤的Queue。
Dictionary:Dictionary<TKey, TValue> 类称为字典类,表⽰键和
值的集合。其中TKey表⽰字典中的类型, Tvalue表⽰
字典中的值类型。 Dictionary类实现了ICollection、
IEnumerable、 IDictionary·接⼝。 定义如下:
Dictionary<string, int> dic = new Dictionary<string, int>();
Add() 将指定的键和值添加到字典中。
TryGetValue() 获取与指定的键相关联的值。
Clear() 从 Dictionary<TKey, TValue> 中移除所有的键和值。
Remove() 从 Dictionary<TKey, TValue> 中移除所指定的键的值。
ContainsKey() 确定 Dictionary<TKey, TValue> 是否包含指定的键。
ContainsValue() 确定 Dictionary<TKey, TValue> 是否包含特定值。
Count 获取Stack中包含的元素。
Keys 获取包含 Dictionary<TKey, TValue> 中的键的集合。
Values 获取包含 Dictionary<TKey, TValue> 中的值的集合。
1.字典是⼀个泛型集合。
2.TKey必须唯⼀。
3.Value可以是变量,也可以是对象。
ArrayList:是⼀个特殊的数组。通过添加和删除元素,就可
以动态改变数组的⻓度。 ArrayList并不是强类型, ArrayList
可能并不总是提供特定任务的最佳性能。 ArrayList类实现了
IList、 ICollection和IEnumerable接⼝。 定义如下:
ArrayList arraylist = new ArrayList();
Add() 将对象添加到 ArrayList 的结尾处。
Insert() 将元素插⼊ ArrayList 的指定索引处。
Remove() 从 ArrayList 中移除特定对象的第⼀个匹配项。
RemoveAt() 移除 ArrayList 的指定索引处的元素。
Reverse() 将整个 ArrayList 中元素的顺序反转。
Contains() 确定某元素是否在ArrayList中。
Clear() 从 ArrayList 中移除所有元素。
Count 获取Stack中包含的元素。
1.⽀持⾃动改变⼤⼩的功能。
2.可以灵活的插⼊元素、删除元素、访问元素。
3.不是强类型,速度跟数组⽐起来要慢。
List<T>类:表⽰可通过索引访问的对象的强类型列表。 提供⽤
于对列表进⾏搜索、排序和操作的⽅法。 List<T>是ArrayList
类的泛型等效类,该类使⽤⼤⼩可按需动态增加的数组实现
IList<T>泛型接⼝。 List<T>类同样也是实现了ICollection、
IEnumerable和IList接⼝。 定义如下:
List<int> list = new List<int>();
Add() 将对象添加到 List<T> 的结尾处。
Insert() 将元素插⼊ List<T> 的指定索引处。
Remove() 从 List<T> 中移除特定对象的第⼀个匹配项。
RemoveAt() 从 List<T> 中移除特定对象的第⼀个匹配项。
RemoveAll() 移除与指定的谓词所定义的条件相匹配的所有元素。
Reverse() 将整个 List<T> 中元素的顺序反转。
IndexOf(T) 搜索指定的对象,并返回整个 List<T> 中第⼀个匹配项
Sort() 的从零开始的索引。 使⽤默认⽐较器对整个 List<T> 中的元素进⾏排序。
Contains() 确定某元素是否在ArrayList中。
Clear() 从 List<T>中移除所有元素。
Count 获取Stack中包含的元素。
1.于ArrayList相⽐, List<T>好并且是类型安全的。
2. 若List<T> 类的类型 T 使⽤是完全相同的。 但是,如果要考虑实现和装箱问题。
在一个有限平面区域上(1000 * 1000)随机生成有序的n个点(用结构体表示点),将其保存在集合中,并排序 public struct Point :IComparable { public int x; public int y; public Point(int x, int y){ this.x = x; this.y = y; } public int CompareTo (object value) { Point p = (Point) value; if (this.x > p.x) { return 1; }else if (this.x == p.x) { return 0; }else { return -1; } } } class Program
{
static void Main(string[] args)
{
Random r = new Random(); int n = int.Parse(Console.ReadLine()); List<Point> list = new List<Point>(); for (int i = 0; i < n; i++) { list.Add(new Point(r.Next(1, 1000),r.Next(1, 1000))); } foreach (Point item in list) { Console.WriteLine("x:{0}, y:{1}", item.x, item.y); } list.Sort(); foreach (Point item in list) { Console.WriteLine("x:{0}, y:{1}", item.x, item.y); }
}
}