2016-11-10 8 views
1

私のプログラムでは、私はエッジのコレクションを持っています、彼らは体重で注文する必要があります。要素を取り除くためのベストコレクション

プログラムのどこかでコレクションを処理する必要があり、コレクションの最大部分を削除する必要があるたびに、

私はArrayListのをすでに使用しているが、私はよりよい解決策(時間効率)を探しています:

public class Edge implements Comparable<Edge> { 
private int weight; 
public void setWeight(int weight) { 
    this.weight = weight;** 
} 

@Override 
public int compareTo(Edge o) { 
    return o.weight - this.weight; 
} 

}

私がやったこと:

private ArrayList<Edge> listOfEdges = new ArrayList<>(); 
    // i suppose here adding some edges in the list 

    Collections.sort(listOfEdges); 
    for (int i = 0; i < listOfEdges.size(); i++) { 
     System.out.println(listOfEdges.get(i).getWeight() + " "); 
    } 

どのようにすることができます&を取得してリストの最大値を削除します。 私はtreeSetをテストしましたが、エッジが同じ重みを持つことができるので、重複した値を受け入れる完璧なソートされたコレクションは何ですか? (時間を

は、私はすでにのArrayListを使用している...彼らは重量で注文する必要があり、私はエッジのコレクションを持っている私のプログラムでは、あなたに

+0

のそれぞれの方法です、それがソートされている場合は、ちょうど最後の項目を削除するか、少なくとも後方端から –

+3

たぶん、優先順位キューまたは最大ヒープを繰り返しますか?迅速に削除することができますと並べ替えられている –

+0

@ cricket_007ありがとう、私はpriorityQueueを使用します。 –

答えて

2

ありがとうしかし、私はよりよい解決策を探しています効率:

heapや優先キューなどのバイナリツリーのような構造が、あなたが探しているものです。オブジェクトを(Comparableインターフェイスで)指定すると、最大値はO(1)時間に取得され、O(log n)時間にはnの時間に削除されます。

どうすれば&リストの最大値を削除できますか?

のぞくとポップは、キューオブジェクトの実装

関連する問題