集合,stack,queue,dictionary,ArrayList,list<T>

哎呀我去,昨天搞那个全排列和寻路算法搞得我脑袋都大了,忘写博了,唉 ,早起补上。。。。。。。

今天的东西挺多,但没什么难度。

集合:创建和管理相关对象组的第⼆种⽅式就是:创建对象集合。
   集合提供⼀种灵活的处理⽅法。 与数组不同,处理的对
   象组可根据程序更改的需要动态地增⻓和收缩。 对于某
   些集合,您可以为放⼊该集合的任何对象分配⼀个“键”,
   以便使⽤该键快速检索对象。
   注意: 集合是类,因此必须声明新集合后,才能向该集合
   中添加元素。集合分为两种类型: ⾮泛型集合和泛型集合。
   使⽤⾮泛型集合的 需引⼊: 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); }
    }
  }

 

posted @ 2015-03-19 07:33  小の太阳  阅读(318)  评论(0编辑  收藏  举报