【问题标题】:How to implement a stack using HashMap in Java?如何在 Java 中使用 HashMap 实现堆栈?
【发布时间】:2014-08-06 10:19:12
【问题描述】:

我想在 Java 中使用 HashMap 实现一个堆栈。 有什么方法可以实现吗?

【问题讨论】:

  • 你可以使用哈希表来模拟一个数组,然后在数组上构建堆栈,但是你为什么要这样做呢?

标签: data-structures hashmap stack


【解决方案1】:

试试这个代码:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-22
    • 2021-06-24
    • 2013-12-18
    • 2021-10-30
    • 2021-06-06
    • 2019-11-11
    • 1970-01-01
    • 2020-10-24
    相关资源
    最近更新 更多