我想知道是否有最佳方法来获取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
}
}
答案 0 :(得分:1)
不,但您可以编写自己的Set
接口实现,并在add
方法检查项状态并增加计数器。然后你可以检索统计数据。
答案 1 :(得分:0)
不,他们不是。但是,使用自制实现或包装器,您可以在插入哈希集时计算统计信息。
答案 2 :(得分:0)
如果内存服务,使用Set实现执行类似的操作将作为Bloch的Effective Java中的示例。选择正是因为如果你想要集合上的统计数据,你必须自己动手。
这里的搜索揭示了我正在思考的参考,在那里他讨论了继承的构成:How is having a wrapper class equals composition as described Joshua Bloch?
我承认这不是问题的严格答案,但我认为它会增加对话并显示一个示例,说明如何(以及为什么)为自己的目的制作自己的仪表类。