gpt4 book ai didi

Java 检查 Stack 是否包含某个类

转载 作者:行者123 更新时间:2023-12-01 00:10:21 27 4
gpt4 key购买 nike

我使用 Stack 来存储不同类的对象。我想弹出直到我遇到某个类(class)。但是如果该堆栈不包含所需的类,我不想弹出任何内容。我已经像这样扩展了堆栈:

  private class ClassStack<T> extends Stack<T>
{
public boolean containsClass(Class type)
{
for (int c = 0; c < size(); c++)
if (type.isInstance(get(c)))
return true;
return false;
}
}

但我不确定实现。首先,我不确定我使用的 Vector 的 get() 是否是 O(1) 。其次,我不知道我是否应该接触那些方法。也许有更好的方法来实现这一目标?谢谢你。

最佳答案

那么,您的 get()方法是 O(n)。
我假设您可以使用另一种方法。持有一个 Map 对象,它将收集类,添加到堆栈中怎么样?在您的 ClassStack 中:

Map<Class, Int> classMap = new HashMap<>();

@Override
public void push(T object) {
Class c = T.getClass();
if (!classMap.contains(c))
classMap.put(c, 1);
else classMap.put(c, classMap.get(c) + 1);

//then add the element to stack itself
}

@Override
public T pop() {
// pop the last element
Class c = last.getClass();
classMap.put(c, classMap.get(c) - 1);
if (classMap.get(c) == 0) classMap.remove(c);
}

public boolean containsClass(Class type) {
return classMap.contains(type) && classMap.get(type) > 0;
}

编辑 : 为了清关,我把所有的电话都给了 T.getClass()到局部变量 Class c

关于Java 检查 Stack 是否包含某个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59358312/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com