java - 删除元素的最佳集合

标签 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,但边缘可以具有相同的权重,那么接受重复值的完美排序集合是什么。

谢谢

最佳答案

In my program i have a collection of edges ,they have to be ordered by the weight... I have already used an ArrayList but i'm looking for a better solution(time efficiency):

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

how can i get&remove the maximum of the list.

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

关于java - 删除元素的最佳集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40519092/

相关文章:

java - 为什么 Spring 安全会从 keycloak 配置中抛出异常 "FilterOrderRegistration.getOrder is null"?

Java Time2 从 3 个整数变为单个整数

java - 下面的程序将如何工作?

java - 将数组列表转换为 html 表

java - 不兼容的类型 : java. lang.Object 无法转换为 java.lang.String

java - 安全转换为 HashMap

java - 停止后媒体播放器不启动

java - 如何从主机名获取IPV6地址

c# - 如何创建起始索引为 1(而不是 0)的 ArrayList

java - hibernate -> ArrayList 无法转换为 Set