1

データと投票を人々に関連付けるJavaコードを開発する必要があります。

候補者に関する基本情報(および一意のID)を含む「候補者」というクラスがあります。

次に、連続する投票(整数)、この候補の投票を表示するJLabelへの参照を関連付ける必要があります...

これを行うための最良の方法はどれですか?

  • 同じ長さの3つのArraList(候補者用に1つ、投票用に1つ、JLabel用に1つ)。各インデックス値は1つの候補者に関するデータを参照していますか?

  • キーとして候補を含むHashTable(uidを使用したhashCoded)と、投票、JLabel参照、およびその他のデータを含む値としてのカスタム構造...

ArrayListとHashTableの両方がアクセス用にO(1)であり、最後に値を追加するためにO(1)であると想定されていることは知っていますが、実際にはパフォーマンスが優れているでしょうか?

ありがとう!

4

2 に答える 2

1

int[]密集した識別子がある場合、最も速いのはです。

私の観察では、プリミティブ値を使用するコレクションは、ボックス化とボックス化解除、および関連するメモリ オーバーヘッドのために、パフォーマンスのボトルネックになる可能性があります。タスクが数値が多い場合は、これを絶対に避けてください。

プリミティブ値の高速コレクションを取得する簡単な方法は、GNU Troveライブラリを使用することです。

いずれにせよ、理論的な複雑さは、実際に優れたパフォーマンスを保証するものではありません。理論的には、QuickSort は HeapSort よりも劣っています。実際には、CPU にやさしく、適切なピボット選択戦略を使用して最悪の状況を回避できるため、より優れています。これは Java でも同じです。理論的には、コストはO(1). 実際には、メモリ管理のオーバーヘッドが非常に大きくなる可能性があります。using に基づくコードには(ArrayCopy などの)int[]いくつかの操作が含まれる場合がありますが、これらは高パフォーマンスのマシン コードに変換され、実際のコストは非常に低くなります。O(n)

しかし、これらは本当に必要ですか?

class Candidate {
   int votes;
   JLabel label;
}

ArrayList<Candidate> candidates;

多分あなたが必要とするすべてです!

于 2013-02-25T10:29:37.707 に答える
1

ArrayList と HashTable は両方とも、アクセスする場合は O(1) であり、最後に値を追加する場合は O(1) であると想定されていますが、実際にはパフォーマンスが高いでしょうか?

arraylist と hashtable にアクセスして挿入するには、同じオーバーヘッドがあります。しかし、arraylist での検索はO(N)、ハッシュテーブルでは isO(1)です。
したがって、候補のハッシュテーブルを検索する必要がある場合は、最良の選択です

于 2013-02-25T10:20:29.000 に答える