2016-11-10 50 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,但邊緣可以具有相同的權重,那麼接受重複值的完美Sorted Collection是什麼。

謝謝

+0

各自的方法。如果它進行排序,然後只是刪除最後一個項目,或者至少從最終迭代向後 –

+3

也許優先級隊列或最大堆?可以快速刪除並排序 –

+0

謝謝@ cricket_007,我將使用priorityQueue。 –

回答

2

在我的計劃,我有邊緣的集合,它們必須由重量責令......我已經使用了一個ArrayList,但是我正在尋找一個更好的解決方案(時間效率):

二叉樹狀結構,如heap或優先級隊列,是你在找什麼。一旦指定了對象(通過Comparable接口),最大值可以在O(1)時間內獲得,並在O(log n)時間內從n邊緣中刪除。

我怎樣才能得到&刪除列表的最大值。

PEEK和流行是一個隊列對象實現