HashSet的统计信息

时间:2014-07-15 14:11:24

标签: java hashset

我想知道是否有最佳方法来获取HashSet中对象的汇总统计信息。有没有好的方法而不是迭代整个Set

import java.lang.Thread.State;
import java.util.HashSet;
import java.util.Set;

public class Stats {

    static class Item {

        private State state;

        public State getState() {
            return state;
        }

        public void setState(State state) {
            this.state = state;
        }

        public Item(State state){
            this.state = state;
        }
    }

    public static void main(String[] args) {

        Set<Item> items = new HashSet<Stats.Item>();
        items.add(new Item(State.NEW));
        items.add(new Item(State.BLOCKED));
        items.add(new Item(State.BLOCKED));

        /*
         * printout here
         */
            // New=1
            // Blocked=2
    }
}

3 个答案:

答案 0 :(得分:1)

不,但您可以编写自己的Set接口实现,并在add方法检查项状态并增加计数器。然后你可以检索统计数据。

答案 1 :(得分:0)

不,他们不是。但是,使用自制实现或包装器,您可以在插入哈希集时计算统计信息。

答案 2 :(得分:0)

如果内存服务,使用Set实现执行类似的操作将作为Bloch的Effective Java中的示例。选择正是因为如果你想要集合上的统计数据,你必须自己动手。

这里的搜索揭示了我正在思考的参考,在那里他讨论了继承的构成:How is having a wrapper class equals composition as described Joshua Bloch?

我承认这不是问题的严格答案,但我认为它会增加对话并显示一个示例,说明如何(以及为什么)为自己的目的制作自己的仪表类。