如何在堆栈对象中搜索一对的值?

How to search if the value of a pair in in a stack object?

我有一堆 Pair,我想看看我的堆栈是否包含特定值,例如,

private Stack<Pair<String key, String value>> store = new Stack<>();

store.push("cookie", "milk");
store.push("cookie", "white");
store.push("cookie", "triple");
store.push("pie", "apple");

我想根据我的堆栈检查它是否包含“白色”,而不是弹出所有内容。如果它包含白色,那么我的方法与不包含白色的方法不同;价值观有优先权。比如,如果它包含白色,则执行 x,否则执行 y。

我知道 Stack 中有一个方法 class search(Object O),其中 returns 堆栈中的位置如果它包含它,或者 -1 如果它不包含但是,我不确定如何使用 Pair 来做到这一点。我必须做 store.search("cookie", "white"),还是只能是“white”值?

嗨,伙计,我尝试了你的例子,发现 java 中没有 Pairs 的默认实现,所以我搜索并发现这个 class 似乎可以完成这项工作:

然后我使用以下代码测试了您的示例:

private static Stack<Pair<String, String>> store = new Stack<>();

    public static void main(String[] args){
        store.push(Pair.createPair("cookie", "milk"));
        store.push(Pair.createPair("cookie", "white"));
        store.push(Pair.createPair("cookie", "triple"));
        store.push(Pair.createPair("pie", "apple"));

        store.search(Pair.createPair("cookie", "white"));
    }

我发现的唯一重要的事情是你的 Pair 实现需要有一个 equals 实现,否则搜索功能将不起作用。

您似乎在创建一对对象,然后将其插入到散列中。我会尝试

    store.search("white");

但是,要搜索包含对象的堆栈,您可能需要构造一个包含“cookie”和“white”的对象对来搜索包含值而不是实际值本身的对象。

我必须问,您使用堆栈而不是映射或 table 来存储密钥对值是有原因的吗?