2017-03-25 9 views
-2

私はArrayListというcontainsを持っています。 ID番号、サイズ、優先度などの多くのプロパティを持つオブジェクトが含まれています。十分なオブジェクトがこのArrayListに挿入された後、ArrayListから最も優先度の高いオブジェクトを削除したいとします。ArrayListと削除するリスト内のオブジェクトを比較する

しかし、私はインデックスでこれを行うことはできません。 contains.remove(index I know has highest priority)と言っても意味がありません。なぜなら、インデックスが変更され、変更されたものを追跡できるからです。配列リストを見て、その中の特定のオブジェクトを最優先で削除するために、ループなどが必要です。

ArrayListのオブジェクトを調べる方法があります。この場合のオブジェクトはタスクであり、最も優先度の高いオブジェクトをArrayListから削除しますか?

+1

リスト内の要素をループし、優先度が既に発生した最高の優先度よりも高いかどうかをチェックします。そうであれば、そのインデックスを格納します。リスト全体をループしたら、格納されているインデックスを持つ要素を削除します。 – fvu

答えて

1

実際にTreeSetが必要ですが、ArrayListは必要ないようです。

  1. オブジェクトをComparableにするか、Comparatorを作成します。比較ロジックはpriorityのプロパティに基づいています。
  2. TreeSetにオブジェクトを格納します。
  3. 優先度が最も高いオブジェクトを削除する必要がある場合は、pollFirst()/pollLast()を使用します。

さらに、PriorityQueueをチェックしてください

主なアイデアは、あなたの比較の実装に基づいて、ボックスからの注文をサポートするデータ構造を使用することです。 O(logN)(TreeSet)またはO(1)(PriorityQueue)でもなく、O(N)(手動反復でArrayList)の代わりにループを作成して、「最高優先度で削除する」操作を省くことができます。

1

最も便利な方法は、すべてのエントリを繰り返し処理し、最も優先度の高いものを保存してから削除することです。

最初の/最後の要素を削除するだけで済むように、リストをソートしておくことをお勧めします。

関連する問題