数组还是HashSet?( 二 )

底层使用了SIMD来优化,在之前的文章中,我们多次提到了SIMD,这里就不赘述了 。

数组还是HashSet?

文章插图
既然如此我们再来确认一下,到底多少个元素以内用for会更快,可以看到16个元素以内,for循环会快于HashSet:
数组还是HashSet?

文章插图
总结所以我们应该选择HashSet<T>还是数组呢?这个就需要分情况简单的总结一下:
  • 在小于16个元素场景,使用for循环匹配会比较快 。
  • 16-32个元素的场景,速度最快是HashSet<T>然后是Array.IndexOfforIEnumerable.Contains
  • 大于32个元素的场景,速度最快是HashSet<T>然后是Array.IndexOfIEnumerable.Containsfor
从这个上面来看,大于32个元素就不合适直接用for比较了 。不过这些差别都很小,除非是性能非常敏感的场景,可以忽略不计,本文解决了笔者的一些困扰,简单记录一下 。

经验总结扩展阅读