我有一个对象集合,保证各不相同(特别是按唯一整数ID索引)。我也知道它们的确切数量(数量不会改变),想知道对于存储/检索这些元素,Array是否比HashSet具有明显的性能优势。
在理论上,Array保证了常数时间插入(因为我提前知道大小)和检索,但HashSet的代码更加清晰简洁,并且增加了一些灵活性,所以我想知道是否在性能方面失去了什么,至少从理论上来说。
我有一个对象集合,保证各不相同(特别是按唯一整数ID索引)。我也知道它们的确切数量(数量不会改变),想知道对于存储/检索这些元素,Array是否比HashSet具有明显的性能优势。
在理论上,Array保证了常数时间插入(因为我提前知道大小)和检索,但HashSet的代码更加清晰简洁,并且增加了一些灵活性,所以我想知道是否在性能方面失去了什么,至少从理论上来说。
取决于你的数据;
HashSet
提供了一个O(1)
的contains()方法但不保留顺序。
ArrayList
的contains()是O(n)
,但是你可以控制条目的顺序。
Array
如果你需要在其中插入任何东西,最坏的情况可能是O(n)
,因为你必须向下移动数据并为插入腾出空间。在Set
中,你可以直接使用SortedSet,它也具有O(n),但具有灵活的操作。
我相信Set更加灵活。
TreeSet
(SortedSet
的实现)具有对数时间复杂度的插入/查找能力... - Oliver Charlesworth看起来你需要一个HashMap,将id映射到计数。特别是,
HashMap<Integer,Integer> counts=new HashMap<Integer,Integer>();
counts.put(uniqueID,counts.get(uniqueID)+1);
HashSet
,如果他使用的对象具有返回其唯一标识符的 hashCode
方法。请注意,实际上这几乎没有什么变化,因为 HashSet
在内部使用了 HashMap
的一个实例... - Nicolas Rinaudo