set和arraylist如何选择

309 阅读1分钟

数量级

  • 博主个人是比较喜欢用set,因为查找速度比list高了很多个level,但是不考虑数量级得出的结论都是耍流氓。

构造set代价高

  • 不同于list的纯数组实现,set需要维护一个hash表,新增元素还需要进行hash计算,还可能有hash碰撞的问题,所以set构造时比list需要更多的时间空间成本

数量与时间空间

  • 十万数量级以下,其实用set和list的构造和查询成本可忽略不计,构造最多几毫秒的事情,查询1毫秒内
  • 数量级再往上
    • set构造时间会与list越拉越大,在数据量大到一定程度,构造时间成本会十分可观,但查询时间可以忽略不计,基本1毫秒内
    • 而list随着数据量增大,构造时间虽然比set短很多,但也不容忽略,查询时间更是致命的弱点
    • 所以需要根据场景权衡,需要查询的场景,毫无疑问需要尽量预先构造好set,用其查询;在无需查询的场景,比如进行遍历迭代操作,则用list

不为莫乘而不浮,我是Larry,加油~