2012-02-02 14 views
0

私は、ユーザーがネットワーク上で共有ドキュメントに入力するアプリケーションを作成しています。 問題の1つは、他のユーザーが入力している回線をブロックすることです。 これを行うには、回線の変更をチェックするDocumentListenerがあります。ユーザーが新しい行に正常に移動すると(その行が使用されていないことを意味します)、リスナーはその行が現在使用されていることを他のユーザーに通知します。ブロックされた行を格納するためのコレクション

DocumentFilterは、許可する前にその行がブロックされている場合に編集が行われるたびにチェックします。

ここで私の懸念事項の1つは、行番号を格納するのにどのようなコレクションが最適かということです。コレクションはちょうどIntegerを保持します。行がブロックされると、その行にその行が追加されます。 DocumentFilterが回線が利用可能かどうかをチェックする必要があるとき、そのリストを通過します。また、その行を使用していたユーザーが新しい行に移動すると、別のメッセージが送信され、その行がユーザーのコレクションから削除されます。

ArrayListはおそらく十分ですが、誰かが違うと思うかもしれないと思っています。

答えて

0

は、ルックアップとブロックされたドキュメントが大量であることが予想される場合、大きなマージンでArrayList<Integer>を上回ります。

私の知る限り( "含んでいる" を参照)最悪の場合のルックアップを知っている通りである

  • O(N) - ArrayList
  • O(LOG2(N)) - SortedList
  • O(1 ) - HashSetしかし、これはハッシュ法に関連します。..

あなたがロックごとに追加のデータを追跡する必要がある場合は、HashMap<Integer, ILockInformation>を使用することを考えるかもしれません。

0

ユニティシティが必要なので、Listは間違いなく適切なコレクションではありません:Setが必要です。

2

ユーザーが新しい行を追加するとどうなりますか?すべての保存された行の位置を変更/番号を変更する必要があります。 そして、ユーザーがプログラムを終了するか、プログラムがクラッシュするか、または彼が夕食のために帰宅するのはどうですか?あなたは何らかのタイムアウトを実装していますか?

とにかく、にSortedSetを行うだろうが、あなたは多分また、設定項目に有効期限を保存する必要があります。..

+0

ユーザーは、テーブルと同様に行を追加することはできません。行は最後に追加するだけで問題にはなりません。しばらくしてから回線を解放することは、その点を考慮する必要があります。 – Giannis

関連する問題