StringBuilder:
作用:解决string在拼接时产生的滞留内存问题
string对象有不可改变性,每次执行拼接的时候,实际上都会产生一个全新的字符串对象
stringBuilder类解决了对字符串重复修改过程中产生大量的对象问题
默认容量是16,拼接长度超过容量时翻一倍增长,没有超过容量就默认为16
超过容量,拼接翻倍增长,如果翻倍之后,容量还不够,就按实际容量是多少就输出多少
StringBuilder sb = new StringBuilder();
Console.WriteLine("没有拼接之前sb的容量为:"+sb.Capacity);
Console.WriteLine("没拼接前sb的长度为"+sb.Length);
sb.Append("a");
sb.Append("b");
Console.WriteLine("拼接后sb的长度为" + sb.Length);
Console.WriteLine("拼接之后的sb的容量为"+sb.Capacity);
Console.WriteLine(sb);
集合:
* 非泛型集合和泛型集合
* ArrayList是线性数据结构
using System.Collections.Generic; //泛型集合命名空间
using System.Collections; //非泛型集合命名空间
//动态数组
ArrayList al = new ArrayList();
//为了解决数组的局限性
//1.长度固定
//2.数组内元素类型固定
//添加元素:
al.Add(1);
al.Add("1");
al.Add('3');
//在指定位置插入一个新值
al.Insert(3,1);
//排序
al.Sort();
//遍历方式
for (int i = 0; i < al.Count; i++)
{
//al[i] = 1;
Console.WriteLine(al[i]);
}
//直接删除某个值
al.Remove("1");
//根据索引删除数组元素
al.RemoveAt(0);
//根据范围删除
al.RemoveRange(0, 2);
//获取数组的大小
Console.WriteLine("数组的长度" + al.Count);
//将arr中的元素复制到al集合中,此时复制的时候al不会自动扩充容量,所以需要al集合的长度要大于
或者等于arr的长度
int[] arr = { 1, 2};
al.SetRange(0, arr);
//获取一个范围内的元素
ArrayList list = al.GetRange(0, 2);
//返回第一个匹配1这个值得索引
Console.WriteLine(al.IndexOf(1));
//返回最后一个匹配1这个值得索引
Console.WriteLine(al.LastIndexOf(1));
//集合反转
al.Reverse();
//清空集合所有元素
al.Clear();
//判断某个元素是否在al中
if (al.Contains(1))
{
Console.WriteLine("集合存在1这个元素");
}
//将al数组中的元素拷贝到object数组当中
object[] objs = al.ToArray();
//在集合中指定位置插入一个新的ICollection子类
int[] arrs = { 1, 2, 3 };
al.InsertRange(0, arrs);
Console.WriteLine("-----" + al.Count);
//第二种遍历方式
foreach (var v in al)
{
//迭代变量v不能复制,只能读取
Console.WriteLine(v);
}