Loading

记录几个常用的数据存储类型

列举项目中常用的几个比较多的数据类型,记录一下方便下次查找,其他还有很多未列举
 
 
Array/ArrayList/List/LinkedList/Queue/Stack/HastSet/SortedSet/Hashtable/SortedList/Dictionary/SortedDictionary
IEnumerable、ICollection、IList、IQueryable
接口是标识功能的,不同的接口拆开,体现接口隔离原则
 
IEnumerable 任何数据集合,都实现了的,为不同的数据结构,提供了统一的数据访问方式,体现就是迭代器模式
  • 数组

  1. int[] intArray = new int[3];
    ArrayList
    List<int> intList = new List<int>() { 1, 2, 3, 4 };
  2.  日常使用最多的,不用多说
  • 链表

           LinkedList

                    1.元素不连续分配,每个元素都有记录前后节点,节点值可以重复
                    2.不能下标访问,找元素就只能遍历 查找不方便
                    LinkedListNode<int> node123 = linkedList.Find(123);//元素123的位置 从头查找
 

          Queue

                   1 先进先出 放任务延迟执行,A不断写入日志任务 B不断获取任务去执行
                   2. Queue<string> numbers = new Queue<string>();
           

    Stack

              1 先进后出 解析表达式目录树的时候,先产生的数据后使用
              2 Stack<string> numbers = new Stack<string>();
  • Set

             集合:hash分布,元素间没关系,动态增加容量 去重
             例:统计用户IP;IP投票 交叉并补--二次好友/间接关注/粉丝合集

        HashSet

  1. HashSet<string> hashSet = new HashSet<string>(); //排序的集合:去重 而且排序
  1. SortedSet<string> sortedSet = new SortedSet<string>();
 
 
  • key-value

         - Hashtable 是基于数组实现的 key-value 体积可以动态增加 拿着key计算一个地址,然后放入key-value
         - object-装箱拆箱 如果不同的key得到相同的地址,第二个在前面地址上 + 1
        - 查找的时候,如果地址对应数据的key不对,那就 + 1查找。
        - 查找个数据 一次定位; 增删 一次定位; 增删查改 都很快
        - 浪费空间,数据太多,重复定位定位,效率就下去了
        - 字典:泛型;key - value,增删查改 都很快;有序的
        - 字典不是线程安全 
  1. Hashtable table = new Hashtable();
  2. Dictionary<int, string> dic = new Dictionary<int, string>();
  3. SortedDictionary<int, string> dic = new SortedDictionary<int, string>(); //排序的key-value
  4. SortedList sortedList = new SortedList(); //IComparer

 

     线程安全的结构类

  ConcurrentBag<>(线程安全的集合)
  ConcurrentStack<> (线程安全的栈)
  ConcurrentQueue<> (线程安全的队列)
  ConcurrentDictionary<> (线程安全的字典)

posted @ 2021-03-02 19:05  大意了啊  阅读(204)  评论(0编辑  收藏  举报