加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 对于一个只能包含唯一项目但在99%的时间内包含0或1项的列

发布时间:2020-12-16 02:02:12 所属栏目:百科 来源:网络整理
导读:我目前正在开展一个项目,我们有一系列活动.我们对事件进行的一项分析是查看特定类型的事件并检查它是否可能是由不久之前发生的另一事件(或在一个奇怪的情况下稍后发生)引起的.这些事件中的每一个只能通过单个事件来实现,但是一个事件可能是多个事件的因果事
我目前正在开展一个项目,我们有一系列活动.我们对事件进行的一项分析是查看特定类型的事件并检查它是否可能是由不久之前发生的另一事件(或在一个奇怪的情况下稍后发生)引起的.这些事件中的每一个只能通过单个事件来实现,但是一个事件可能是多个事件的因果事件.我们希望这种关联可以双向进行,这样,从任何特定的方法,您都可以直接进入导致它的事件,或者它引起的事件之一.基于此,我首先将以下属性添加到Event对象并添加功能:

protected Event causalEvent;
protected List<Event> effectedEvents;

经过一番思考后,我认为我们从不希望将相同的项目两次添加到affectedEvents列表中.在阅读了Preventing Duplicate List<T> Entries的答案之后,我选择了Hashset.

protected Event causalEvent;
protected HashSet<Event> effectedEvents;

一个同事和我讨论了我添加的代码,他指出使用HashSet可能会让人感到困惑,因为他倾向于看到一个HashSet并假设有大量的数据.在我们的例子中,由于算法中使用的规则,affectedEvents在大约90%的情况下将有0个项目,1个项目在9%中,2个可能在1%的时间内.我们几乎永远不会有超过2项,尽管有可能.我相信两个集合的查询成本是相同的.使用的内存量非常相似,因为两者都开始假设一个小容量(虽然,我会承认List使您能够在构造函数中设置该容量,而HashSet只允许根据其内容减少值,“四舍五入到特定于实现的值“).

所以,问题很简单,除了那些不熟悉使用HashSet以确保唯一性的人之外,使用HashSet是否有任何真正的惩罚?

解决方法

执行分析 in this answer表示当您获得5个字符串或20个对象时,您只能看到HashSet优于List的性能优势(当然,结果将根据您的操作而有所不同).由于几乎在所有情况下你都会有0到2个项目,因此在性能方面你最好的选择可能就是使用List.

我不担心那些不熟悉使用HashSet来确保唯一性的人的困惑.这是HashSet的主要用途之一.选择最适合工作的工具,如果你认为人们会感到困惑,那么简短的评论可以帮助你做到这一点.

此外,虽然使用性能最佳的编码策略是好的,但您也应该注意花费太多时间进行微观优化,这可能为时过早.除非你使用了很多这些对象,否则在这种情况下你可能永远不会注意到List和HashSet之间的区别.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读