2016-10-19 9 views
0

私は未知のサイズの整数の連続入力があります。任意の瞬時に、k要素を入力として受け取ったとき、私はサイズkのヒープを持っていたいと思います。あらかじめある長さの配列を初期化せずにこれをどうすれば実現できますか?事前に入力のサイズを知らなくてもヒープを実装できますか?

+0

java.util.ArrayListは、項目の数が増えるにつれて、バッキング配列を再割り当てしています。 – rkosegi

答えて

0

java.util.PriorityQueueの基礎となるデータ構造はヒープです。私はあなたのデータに注文機能を持たせようとしていたヒープについて言及しています。

デフォルトのコンストラクタを使用してPriorityQueueを初期化すると、デフォルトの初期容量(11)を持つPriorityQueueが作成され、自然順序付けに従って要素が順序付けられます。カスタムComparatorを定義すると、それはあなたの制約に従って注文します。

ArrayListのような他の動的サイズのデータ​​構造では、自分自身をソートしない限りソート順の機能は提供されません。

実行ストリームのk番目に小さい/最大の要素に似た何かを解決したいと思います。はいの場合は、デフォルトコンストラクタでPriorityQueueを初期化し、現在のサイズがkであるかどうかを各要素チェックで確認できます。現在のサイズがkの場合は、制約に従って新しい要素で先頭の要素を置き換えます。

最後に、動的サイズのみが必要な場合はArrayListを使用し、ヒープのような注文は必要ありません。

関連する問題