zoukankan      html  css  js  c++  java
  • 集合,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); }
        }
      }
  • 相关阅读:
    Eval版的ASP木马原理解析
    cmd命令
    Eval版的ASP木马原理解析
    Vbs脚本实现radmin终极后门
    迅雷是如何识别并偷偷上传文件的?
    迅雷是如何识别并偷偷上传文件的?
    广外男生病毒代码剖析
    cmd命令
    Vbs脚本实现radmin终极后门
    广外男生病毒代码剖析
  • 原文地址:https://www.cnblogs.com/little-sun/p/4349370.html
Copyright © 2011-2022 走看看