Java HashSet与阵列性能

don*_*ton 12 java arrays performance hashset data-structures

我有一组保证不同的对象(特别是由唯一的整数ID索引).我也确切地知道它们中有多少(并且数字不会改变),并且想知道Array是否比HashSet具有显着的性能优势来存储/检索所述元素.

在纸面上,Array保证了恒定的时间插入(因为我提前知道了大小)和检索,但是HashSet的代码看起来更清晰并且增加了一些灵活性,所以我想知道我是否在使用它时失去任何性能至少在理论上.

JNL*_*JNL 21

取决于您的数据;

HashSet为您提供O(1)contains()方法,但不保留顺序.

ArrayListcontains()O(n)但您可以控制条目的顺序.

Array如果你需要在两者之间插入任何东西,最坏的情况可能是O(n),因为你必须向下移动数据并为插入腾出空间.在Set,你可以直接使用SortedSet which too has O(n) too but with flexible operations.

我相信Set更灵活.

  • 但是`TreeSet`(`SortedSet`的实现)是`log(n)`插入/查找... (6认同)
  • @OliCharlesworth Tx.突出了集合的灵活性而不是数组. (2认同)