没有用于arrayset的Java实现

use*_*291 16 java set

为什么Java提供了几种不同的实现Set类型,包括HashSetTreeSet ArraySet

Jon*_*eet 17

仅基于无特定顺序的元素阵列的集合将始终具有O(n)时间用于包含检查.它不会非常有用,IMO.你打算什么时候使用该替代HashSetTreeSet

数组最有用的方面是您可以非常快速地访问具有特定索引的元素.当涉及到集合时,这并不是非常相关.

  • 只是为了扮演魔鬼的拥护者...有些情况下,一个自我排序并保证唯一性的数组将非常有用.当然在更新时性能会很差,但是在索引随机访问方面会很出色,所以如果主要是读取集合,那么性能就不会成为问题.我想要一个支持android的BaseAdapter(http://developer.android.com/reference/android/widget/BaseAdapter.html). (2认同)
  • O(n)vs O(1)不是'整个故事.散列成本很重要 - 对于具有复杂散列函数的非常小的集合,线性搜索比散列表更快.显然,如果你希望你的集合中有> 8个元素,那么就该使用一个hashset了.否则,ArraySet是有意义的,特别是如果你知道大多数情况下命中集合中第一个元素的"最佳情况"结果是最常见的. (2认同)
  • 我为一个集合倾向于包含少量元素的情况写了一个`ArraySet`,并且迭代的次数远远超过它们的修改次数.迭代比`HashSet`快约30%. (2认同)

Pet*_*rey 10

CopyOnWriteArraySet,它是一个由数组支持的集合.

这不是特别有用,因为它的性能对于大型集合来说并不是很好.