随笔分类 - 数据结构和算法
摘要:List是线程不安全的,通过一个数组存储数据,当容量达到数组上限时,创建一个新数组,因此存在线程安全问题 SafeList是在做增删改操作时返回一个新的ReadonlyList,所以不存在线程安全问题 /// <summary> /// SafeList is mutable, but it use
阅读全文
摘要:介绍 支持数字类型、浮点类型运算表达式运算,看下面的案例 具体步骤 1)初始化两个栈:运算符栈s1和储存中间结果的栈s2; 2)从左至右扫描中缀表达式; 3)遇到操作数时,将其压s2; 4)遇到运算符时,比较其与s1栈顶运算符的优先级: (1)如果s1为空,或栈顶运算符为左括号“(”,则直接将此运算
阅读全文
摘要:链表 链表是以节点的方式存储 每个节点包含data域,next域,next域指向下一个节点 链表分为:带头结点、不带头节点,根据实际需求确定 客户端 LinkedList<string> list = new LinkedList<string>(); list.Add("fan"); list.A
阅读全文
摘要:队列: 队列是一个有序列表,遵循先入先出原则,可以用数组或链表实现 使用场景 用于排队,按顺序执行 客户端: public static void Main(string[] args) { ArrayQueue<int> queue = new ArrayQueue<int>(6); queue.
阅读全文
摘要:稀疏数组: 当一个元素中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数据。 稀疏数组的处理方法: 记录一个数组有多少个不同的值,把具有不同值的元素的行列及值记录在一个小规模数组中,从而缩小程序的规模 使用场景 序列化大部分元素值相同的数组,可以节省存储空间 客户端 public
阅读全文
摘要:思路 野路子实现,完全自己想出来的实现方式,将棋盘转成一维数组,寻找横向、纵向、左斜、右斜元素下标的关系。 横向:元素之间下标相差1; 纵向:元素之间下标相差棋盘宽度; 右斜:元素之间下标相差宽度+1; 左斜:元素之间下标相差宽度-1; 客户端 没有写界面,先用测试数据 public static
阅读全文
摘要:众所周知,HashMap是一个用于存储Key-Value键值对的集合,每一个键值对也叫做Entry。这些个键值对(Entry)分散存储在一个数组当中,这个数组就是HashMap的主干。 HashMap数组每一个元素的初始值都是Null。 对于HashMap,我们最常使用的是两个方法:Get 和 Pu
阅读全文
摘要:public class BloomFilter { public BitArray _BloomArray; public Int64 BloomArryLength { get; } public Int64 BitIndexCount { get; } /// <summary> /// 初始
阅读全文
摘要:Hashtable、Dictionary:使用方式类似,都是存储键值对 Hashtable: Hashtable存储键值对,key、value都是object类型 Hashtable是线程安全的,线程安全实现方式:Hashtable类中有个类SyncHashtable ,封装Hashtable实例,
阅读全文
摘要:通过分析源码可以更好理解List<T>的工作方式,帮助我们写出更稳定的代码。 List<T>源码地址: https://github.com/dotnet/corefx/blob/master/src/System.Collections/src/System/Collections/Generic
阅读全文
摘要:实体 public class SlaveConfiguration { public string ConnectionString { get; set; } public int Weight { get; set; } public int Attach { get; set; } } 轮巡
阅读全文
摘要:BlockingCollection可实现单体程序内队列功能,适合写日志、发邮件等并发高可异步的操作 BlockingCollection是一个线程安全的集合类,可提供以下功能: 实现制造者-使用者模式。 通过多线程并发添加和获取项。 可选最大容量。 集合为空或已满时通过插入和移除操作进行阻塞。 插
阅读全文
摘要:.net中的MemoryCache是通过内部封装一个静态Dictionary 自己写一个缓存,支持过期时间 来看看内部怎么实现的 public class CustomerCache : ICache { private static ConcurrentDictionary<string, Key
阅读全文
摘要:数组型: Array:内存连续分配,长度不可变,可索引访问。 ArrayList:早期版本使用,非泛型,类型不安全,如果元素数据类型不同可考虑使用。 List<>:泛型,可变长度,内存连续分配,只要内存是连续分配的都可以使用索引访问。 以上三种数据类型都是内存连续的,所以可以使用索引访问,增删改慢,
阅读全文