我想在Java中使用HashMap实现堆栈。 有没有办法实现这个目标?
答案 0 :(得分:0)
试试这段代码:
public class FrequencyStack<T> {
private final Map<T, Integer> countMap = new HashMap<T, Integer>();
private final Map<Integer, Set<T>> stackMap = new HashMap<Integer, Set<T>>();
private int maxCount = 0;
public void push(T o) {
Integer c = countMap.get(o);
if (c == null) {
countMap.put(o, c = 1);
} else {
countMap.put(o, ++c);
}
Set<T> set = stackMap.get(c);
if (set == null)
stackMap.put(c, set = new LinkedHashSet<T>());
set.add(o);
if (c > maxCount)
maxCount = c;
}
public T pop() {
if (maxCount == 0)
return null;
Set<T> set = stackMap.get(maxCount);
T o = set.iterator().next();
set.remove(o);
if (maxCount == 1) {
countMap.remove(o);
}
if (set.size() == 0) {
stackMap.remove(maxCount);
--maxCount;
}
return o;
}
public T top() {
if (maxCount == 0)
return null;
return stackMap.get(maxCount).iterator().next();
}
}