2

並べ替えられたオブジェクトの配列が与えられますが、順序はオブジェクトの属性に基づいています。(並べ替えは、カスタム Comparator で Collections.sort() を使用し、次に toArray() を呼び出す List を介して行われます)。

SomeObject の重複インスタンスは許可されません (この点での「重複」は SomeObject の複数の属性値に依存します) が、SomeObject の複数のインスタンスが、並べ替えに使用される attribute1 に対して同じ値を持つ可能性があります。

public SomeObject {
  public attribute1;
  public attribute2;
}

List<SomeObject> list = ...
Collections.sort(list, new Comparator<SomeObject>() {
  @Override
  public int compare(SomeObject v1, SomeObject v2) {
    if (v1.attribute1 > v2.attribute1) {
      return 1;
    } else if (v1.attribute1 < v2.attribute1) {
      return -1;
    } else
      return 0;
  }
});
SomeObject[] array = list.toArray(new SomeObject[0]);

ある属性に基づいた特定のオブジェクトがその配列にあるかどうかを効率的にチェックする方法と、以前のルックアップで既に見つかったオブジェクトを「マーク」する方法 (たとえば、単にそれらを配列から削除することによって; 既に見つかったオブジェクトはその必要はありません)後でアクセスできます)。

後の要件がなければ、カスタム Comparator で Arrays.binarySearch() を実行できます。しかし、すでに見つかったオブジェクトを削除したい場合は、明らかに機能しません。

4

3 に答える 3

0

Arian の回答に基づいてTreeBag、Apache Commons の Collections ライブラリからも使用できます。これは によってサポートされ、TreeMap繰り返される要素のカウントを維持します。

于 2013-07-09T21:10:23.703 に答える