1

我必须开发一个Java代码,将数据和投票与人们联系起来。

我有一个名为“Candidate”的课程,其中包含有关候选人的基本信息(和一个唯一的 ID)。

然后,我必须关联连续的投票(整数),对 JLabel 的引用,在哪里显示该候选人的投票,...

最好的方法是什么?

  • 3 ArraList(1个候选人,1个投票,1个JLabel)长度相同,每个索引值都引用关于1个候选人的数据?

  • 以候选人为键(使用 uid 进行哈希编码)和自定义结构作为包含投票、JLabel 引用和其他数据的值的 HashTable...

我知道 ArrayList 和 HashTable 都应该是 O(1) 来访问和 O(1) 来在最后添加一个值,但它们真的会像性能一样吗?

谢谢!

4

2 回答 2

1

ArrayList 和 HashTable 都应该是 O(1) 用于访问,O(1) 用于在最后添加一个值,但它们真的会像性能一样吗?

访问和插入 arraylist 和 hashtable 具有相同的开销。但是在 arraylist 中的搜索是O(N)在 hashtable 中O(1)
所以如果你需要搜索一个候选哈希表是最好的选择

于 2013-02-25T10:20:29.000 回答
1

int[]如果您有密集的标识符,最快的将是 a 。

在我的观察中,任何使用原始值的集合都可能成为性能瓶颈,因为装箱和拆箱以及相关的内存开销。如果您的任务是繁重的数字,请不惜一切代价避免这种情况。

快速收集原始值的一种简单方法是使用GNU Trove库。

无论哪种方式:理论上的复杂性并不能保证实践中的良好性能。理论上,QuickSort 比 HeapSort 差。在实践中,它更好,因为它对 CPU 更友好,并且在实践中可以通过良好的枢轴选择策略来避免最坏的情况。这与 Java 相同:理论上,成本是O(1). 实际上,它可能会带来相当大的内存管理开销。基于 using 的代码int[]可能在(例如 ArrayCopy)中有一些操作O(n),但这些操作可以转换为高性能机器代码,并且实际成本非常低。

但是:你真的需要这些吗?

class Candidate {
   int votes;
   JLabel label;
}

ArrayList<Candidate> candidates;

也许是你所需要的!

于 2013-02-25T10:29:37.707 回答