zoukankan      html  css  js  c++  java
  • .NET基础回顾(五)

    一.字符串

    1. 字符串的恒定性

    (1)字符串拘留池的概念(即时窗口的使用);

    (2)在创建一个字符串对象的时候,会先在字符串拘留池寻找是否有相同字符串内容的对象,如果有有就直接让变量指向这个对象,如果没有就创建新的对象;

    2. 字符串部分函数用法

    (1)string.Empty代表空字符串“”,而不是null;

    (2)string.Compare(s1,s2),用来比较两个字符的大小;

    (3)string.Concat(s1,s2),连接两个字符串并组成一个新串;

    (4)s1.Contains(s2),判断指定的串是否包含指定的字串,返回bool值;

    (5)s1.EndsWith(s2)(s1.StartsWith(s2)),判断指定的字符串是以指定的字串结尾(开始);

    (6)s1.Equals(s2),判断是否与指定字符串相同;

    (7)string.Format(“我爱{0},你爱{1}”,“你”,“他”),格式化字符串;

    (8)s1.IndexOf()(s1.LastIndexOf()),查看指定子串在字符串中的索引(从字符串结尾往前查);

    (9)str3.Insert(1,“我”),指定位置插入字符串;

    (10)string.IsNullOrEmpty(str1),判断字符串是否为空串或者为null;

    (11)str1.Remove(3),如果只穿一个int类型的数,会保留前面的,删除后面的(还有其他参数的重载方法);

    (12)str1.Replace(str2,str3),替换;

    (13)str1.Split(),分割成字符数组,可以用字符,字符串,空等进行分割,分割条件可以枚举出来;

    (14)str1.Substring(1),从指定位置开始截取字符串;

    (15)ToCharArray(),转换成字符数组;

    (16)ToLow(),ToUpper(),转换大小写;

    (17)Trim(),取消字符串前面和后面的空格;

    3. StringBuilder(高效的字符串操作)

    (1)sb.Append(),在sb对象里的字符串中追加新串;

    (2)sb.AppendLine(),追加字符串并在末尾加换行符;

    (3)和String比较来说,sb对象是可变的,String是不可变化的,当改变sb里的字符串时,不会重新开辟空间,而是直接在堆空间内改变sb所指的字符数组;

    二.集合

    1. 我们自己的集合和索引器

    程序示例:

     1 class MyArrayList
     2     {
     3         int index = 0;
     4         private int[] arr;
     5 
     6         /// <summary>
     7         /// 构造函数用来指定集合的长度
     8         /// </summary>
     9         /// <param name="capacity"></param>
    10         public MyArrayList(int capacity)
    11         {
    12             this.arr = new int[capacity];
    13         }
    14 
    15         /// <summary>
    16         /// Add方法
    17         /// </summary>
    18         /// <param name="value"></param>
    19         public void Add(int value)
    20         {
    21             if (index >= arr.Length)
    22             {
    23                 int[] newArr = new int[arr.Length*2];
    24                 Array.Copy(arr,newArr,arr.Length);
    25                 arr = newArr;
    26             }
    27             arr[index++] = value;
    28         }
    29 
    30         /// <summary>
    31         /// 索引器
    32         /// </summary>
    33         /// <param name="index"></param>
    34         /// <returns></returns>
    35         public int this[int index]
    36         {
    37             get
    38             {
    39                 return arr[index];
    40             }
    41             set
    42             {
    43                 arr[index] = value;
    44             }
    45         }
    46 
    47         /// <summary>
    48         /// 元素的个数
    49         /// </summary>
    50         public int Count
    51         {
    52             get
    53             {
    54                 return index; 
    55             }
    56         }
    57 
    58     }

    2. ArrayList

    (1)list.AddRange(ICollection c),可传参数为实现了ICollection接口的实现类的对象,添加集合;

             (2)ArrayList内部存储数据是一个object数组,创建这个类的对象的时候,这个对象里的数组长度为0;

             (3)调用Add方法加元素的时候,如果第一次增加元素,就会将数组的长度变成4往数组里加;

             (4)如果存储数据的数组满了,就会新建一个数组长度是原来数组的两倍,这个数组被原来数组的变量所引用;

             (5)list.Remove(),删除指定的值类型对象,删除的是第一个;

             程序实例:

             Person p = new Person(){Name = “新疆妹”};

    list.Add();

    list.Add();

    list.Remove(p);

    (6)list.RemoveAt(),删除指定的下标的元素;

    (7)list.RemoveRange(),删除指定的范围;

    (8)list.Clear(),清空动态数组,清空后数组的容量Capacity不变; 

    (9)Object obj = list.Clone();

    三.Foreach原理

    1. 如果我们自己写的集合要被遍历,必须实现IEnumerator接口,因为foreach背后的代码如下:

    IEnumerator tor = list.GetEnumerator();

    While(tor.MoveNext())

    {

             Console.WriteLine(tor.Current);

    }

    2. GetEnumerator()这个方法,返回一个实现了IEnumerator接口的对象;

    3. 所以我们要实现IEnumerator这个接口中GetEnumerator()的话,就要写一个类来实现IEnumerator(),方法返回这个类的实例;

    4. IEnumerator接口中定义一个Current只读属性,MoveNext方法,Reset()方法;

    5. MoveNext方法的作用,将指针向前移动一位,并判断当前位是否有元素,如果有则返回true,否则返回false;

    6. Current只读属性,得到当前指针指向的值;

    7. 这两个方法都是在操作数组,而这个数组在我们的集合类中,所以我们要想办法将集合类的数组传递到当前迭代器类中;

    8. 迭代器对象在集合类中创建,所以可通过构造函数让集合将他的数组传递给迭代器,这个时候迭代器已经有了数组的引用;

    9. 实现MoveNext方法,声明index变量,用来保存当前指针指向的数组的索引,默认在-1,每调用一次这个方法,就index++,接着再判断index元素是否存在,index<count就存在,所以迭代器还需要知道元素的有效个数,通过构造函数传入;

    10. 实现Current属性,return arr[index];

    程序示例:

      1 /// <summary>
      2     ///  我们自己的集合. //int类型的数.
      3     /// </summary>
      4     class MyArrayList : IEnumerable
      5     {
      6         /// <summary>
      7         ///  数组字段.  这个数组用来存储整型数据。
      8         /// </summary>
      9         private int[] arr; //10.10
     10 
     11         /// <summary>
     12         ///  保存着1次往arr里存储数据的索引
     13         /// </summary>
     14         int index = 0;//1   2 
     15 
     16         /// <summary>
     17         ///  元素的个数
     18         /// </summary>
     19         public int Count
     20         {
     21             get
     22             {
     23                 return index;
     24             }
     25         }
     26 
     27         /// <summary>
     28         ///  构造函数用来初始化数组的长度
     29         /// </summary>
     30         /// <param name="capcity"></param>
     31         public MyArrayList(int capcity)
     32         {
     33             this.arr = new int[capcity];
     34         }
     35 
     36         public MyArrayList() { }
     37 
     38         public void Add(int value) //1  index  2   3
     39         {
     40             //当新增1个元素的时候.
     41             //我判断一下 arr 有没有存满  如果没有存满就继续往里存
     42             if (index >= arr.Length)  //
     43             {
     44                 //我重新创建1个数组 数组的长度是原来的2倍
     45                 int[] newArr = new int[arr.Length * 2];
     46                 //将原来的数组中的数据拷贝到新数组中.
     47                 Array.Copy(arr, newArr, arr.Length);
     48                 //然后将旧数组的变量指向新数组
     49                 arr = newArr;
     50             }
     51             arr[index++] = value;
     52         }
     53 
     54         /// <summary>
     55         ///  索引器 
     56         /// </summary>
     57         /// <param name="index"></param>
     58         /// <returns></returns>
     59         public int this[int index]
     60         {
     61             get
     62             {
     63                 return arr[index];
     64             }
     65             set
     66             {
     67                 arr[index] = value;
     68             }
     69         }
     70 
     71         /// <summary>
     72         ///  新增1个范围.
     73         /// </summary>
     74         /// <param name="arr"></param>
     75         public void AddRange(int[] arr)
     76         {
     77             foreach (int item in arr)
     78             {
     79                 this.Add(item);
     80             }
     81         }
     82 
     83         //实现IEnumerable成员 
     84         public IEnumerator GetEnumerator()
     85         {
     86             return new MyIEnumerator(this.arr,Count);
     87         }
     88 
     89     }
     90 
     91     class MyIEnumerator : IEnumerator
     92     { 
     93         private int[] arr;
     94 
     95         /// <summary>
     96         ///  保存的是当前读到第几个元素 默认-1
     97         /// </summary>
     98         int index = -1;
     99 
    100         int count;
    101 
    102         public MyIEnumerator(int[] arr,int count)
    103         {
    104             this.arr = arr;
    105             this.count = count;
    106         }
    107 
    108         /// <summary>
    109         ///  返回当前指针指向的元素的值
    110         /// </summary>
    111         public object Current
    112         {
    113             get
    114             {
    115                return  this.arr[index];
    116             }
    117         }
    118 
    119         /// <summary>
    120         ///  是将指针向前移动1位,并判断当前位有没有元素.
    121         /// </summary>
    122         /// <returns></returns>
    123         public bool MoveNext()
    124         {
    125             index++;
    126             if (index < this.count)
    127                 return true;
    128             else
    129                 return false;
    130         }
    131 
    132         public void Reset()
    133         {
    134             throw new NotImplementedException();
    135         }
    136     }
  • 相关阅读:
    linux centos下载地址
    什么是镜像文件?
    Linux下处理JSON的命令行工具:jq---安装
    CentOS7安装第三方yum源EPEL
    CentOS 6.5 下编译安装 Nginx 1.8.0
    CentOS 6.7 如何启用中文输入法
    Linux Yum 命令使用举例
    YUM 安装及清理
    Linux常用命令之rpm安装命令
    使用git代替FTP部署代码到服务器的例子
  • 原文地址:https://www.cnblogs.com/HuoAA/p/4051841.html
Copyright © 2011-2022 走看看