2016-11-10 49 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和流行是一个队列对象实现