首页 新闻 会员 周边 捐助

c#安全队列和安全堆栈实现为什么不同?

1
悬赏园豆:20 [已解决问题] 解决于 2018-12-23 14:55

最近为了实现一个集合,去了解了下安全集合,我一直以为ConcurrentStack和ConcurrentQueue应该内部差不多,因为他们功能差别不大。但是现在发现一个是数组,一个是链表,为啥会选择2类不同的结构来实现呢?是什么场景问题吗?

IT苦行僧的主页 IT苦行僧 | 初学一级 | 园豆:128
提问于:2018-10-29 22:18
< >
分享
最佳答案
0

我知道数组和链表的应用场景不一样,他们有各自的优缺点:

  1. 数组的优点:可快速随机访问,因为数组在内存中连续存放,通过索引就能计算出内存地址;
  2. 链表的优点:非常快的插入和删除节点(只需要改变一个或两个指针值)
  3. 数组的缺点:插入和删除节点慢,数组的长度是提前定义好的,如果要插入一个节点,需要重新创建一个长度+1的数组(C#里貌似有个什么ArrayList,我好像看过源码,每次插入新值会判断数组长度是否够用,不够用就new一个更长的数组,并不是只比旧数组长1,这样下次再插入就不用new新的数组了,但是意思是一样的),然后复制元素;要删除一个数组的话,或者是新建一个数组,然后复制元素,或者是移动被删除元素后面的所有元素
  4. 链表的缺点:随机访问慢,比如我要找第100个元素,必须从第一个开始找起,一直跟着前一个元素的指针找后一个元素,重复99次才能找到

我没有研究过ConcurrentStack和ConcurrentQueue。但据你的描述,应该是为了给调用者多一个选择,调用者可以根据自己的实际情况(是关注随机读取速度,还是关注频繁插入删除)取舍。

收获园豆:15
会长 | 专家六级 |园豆:12463 | 2018-10-30 09:39
其他回答(1)
0

且不受不同问题,解决方法不一样;相同问题同样可能解决方法不一样,这有什么好计较的?只是在自己的选项里面是否有更优选择而已,当然如果你不高兴就不给最优解,别人拿到那么用就那么用。

收获园豆:5
花飘水流兮 | 园豆:13595 (专家六级) | 2018-10-30 13:40
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册