java - 是否可以在堆栈上使用提供的 Java 集合方法,例如 max、min、sort 等...?

标签 java data-structures collections stack

我正在解决一个涉及 HackerRank 上 Stacks 的问题 ( See Here )。问题的一部分要求提供堆栈内的最大值。我认为一个简单的方法就是编写一个带有 max() 方法的扩展 Stack 类(见下文)。这确实有效,但我认为更简单的方法可能是利用 Java 的 Collections 方法。所以我构建了 craftyMax() 方法(也见下文)。

class MyStack<T> extends Stack<T> {
    public T craftyMax() {
        return Collections.max(this);
    }

    public T max() {
        Integer max = Integer.MIN_VALUE;

        for (T item: this) {
            max = Math.max((Integer)item, max);
        }

        return (T) max;
    }
}

当然这不起作用,因为编译器回复如下:

Solution.java:6: error: no suitable method found for max(MyStack<T#1>)
        return Collections.max(this);
                          ^
    method Collections.<T#2>max(Collection<? extends T#2>) is not applicable
      (inferred type does not conform to upper bound(s)
        inferred: T#1
        upper bound(s): Comparable<? super T#1>,Object)
    method Collections.<T#3>max(Collection<? extends T#3>,Comparator<? super T#3>) is not applicable
      (cannot infer type-variable(s) T#3
        (actual and formal argument lists differ in length))
  where T#1,T#2,T#3 are type-variables:
    T#1 extends Object declared in class MyStack
    T#2 extends Object,Comparable<? super T#2> declared in method <T#2>max(Collection<? extends T#2>)
    T#3 extends Object declared in method <T#3>max(Collection<? extends T#3>,Comparator<? super T#3>)
Note: Solution.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
1 error

从那时起,我尝试了一些不同的事情并四处寻找,但我似乎无法找到我在这里尝试做的事情是否可能。所以我的问题是:

是否可以在堆栈上/内部使用提供的 Java 集合方法,例如 max、min、sort 等...?还是我期望太高了?

最佳答案

public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)

仅适用于Collection其元素类型实现 Comparable 的 s界面。

因此,您的代码将使用正确的类型绑定(bind):

class MyStack<T extends Comparable<T>> extends Stack<T> {
    public T craftyMax() {
        return Collections.max(this);
    }
}

不过,我不确定你的第二种方法( max() )。您正在类型转换TInteger 。如果您确定TInteger ,为什么不定义 MyStackclass MyStack extends Stack<Integer>

关于java - 是否可以在堆栈上使用提供的 Java 集合方法,例如 max、min、sort 等...?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53810241/

相关文章:

java - 没有 META-INF 文件夹,Minecraft 如何运行?

java - 在 Java 中导入对象 (Eclipse)

java - 使用 Collection 框架计算值(value)的百分比

java - 在 Java 中使用泛型过滤集合

c - 如何在不同的头文件中具有相同类型和名称的两个结构而不发生冲突?

algorithm - 获得最接近的 k 项的最有效实现

c - 添加稀疏矩阵 C 程序后,值未存储在链接列表中

Java : The Map value comparison is failing to compare with the higher values. 为什么?

java - 返回 Collection 的方法在通过反射调用时返回数组?

java - Collections.sort() 方法未正确选择重载方法