如何在Java中使用HashMap实现堆栈?

时间:2014-08-06 10:19:13

标签: data-structures hashmap stack

我想在Java中使用HashMap实现堆栈。 有没有办法实现这个目标?

1 个答案:

答案 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();
    }   
}