Java:List的ArrayList,Map的HashMap和Set的HashSet?

Gre*_*nie 5 java

我通常总是发现使用标题中列出的接口的具体类就足够了.通常当我使用其他类型(例如LinkedList或TreeSet)时,原因是功能而不是性能 - 例如,队列的LinkedList.

我有时构造的ArrayList的初始容量大于默认值10,HashMap的默认值大于16,但我通常(特别是对于业务CRUD)从未看到自己在想"嗯...我应该使用LinkedList而不是ArrayList,如果我要插入并遍历整个List?"

我只是想知道这里的其他人使用什么(以及为什么)以及他们开发的应用程序类型.

Yis*_*hai 10

这些肯定是我的默认值,虽然通常LinkedList实际上是列表的更好选择,因为绝大多数列表似乎只是按顺序迭代,或者无论如何通过Arrays.asList转换为数组.

但是在保持一致的可维护代码方面,标准化那些并使用替代品是有道理的,当有人读取代码并看到替代方案时,他们立即开始认为代码正在做一些特殊的事情.

我总是将参数和变量键入为Collection,Map和List,除非我有特殊的理由来引用子类型,这样在需要时切换是一行代码.

如果你需要随机访问,我有时会看到明确要求一个ArrayList,但在实践中确实没有发生.

  • 即使您只是迭代,ArrayList通常也会更好,因为它具有更少的内存开销. (3认同)
  • +1总是始终使用接口类,除非你有充分的理由.我通过使用List(由ArrayList支持)将实现转换为CopyOnWriteArrayList来修复现实问题.一线修复.始终使用接口. (2认同)