删除元素的最佳集合

时间:2016-11-10 02:28:46

标签: java arraylist collections

在我的程序中,我有一系列边缘,它们必须按重量排序。

在程序的某个地方,我必须处理集合,每次我必须删除最大的集合。

我已经使用过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。

谢谢

1 个答案:

答案 0 :(得分:2)

  

在我的程序中我有一系列边缘,它们必须按重量排序...我已经使用过ArrayList但我正在寻找更好的解决方案(时间效率):

您正在寻找类似二叉树的结构,例如heap或优先级队列。一旦指定了对象排序(通过Comparable接口),就可以在O(1)时间内获得最大值,并在O(log n)时间内移除n个边缘。

  

如何获取和删除列表的最大值。

peek和pop是队列对象实现的相应方法