编辑更详细的功能说明:
我有HashSet
填充了名为Symbol
的特定对象。特定函数遍历所有Symbol
。该函数指定每个Symbol
的能源成本并返回此值。我想制作一个新的Set
/ Map
并将Symbol
保存在其中,按此能源费用排序。
下一个算法将Symbol
的能量成本降低,并将其放入另一个List
,这在能源成本的情况下是有限的。当此List
已满时,算法结束。
我应该使用什么来节省能源成本和Symbol
?我应该能够获得能源成本和Symbol
。
我想到了一个SortedMap
并通过guava.collection
点这里订购:
https://stackoverflow.com/a/3420912
但我不知道这是否是最佳解决方案?也许Set
会更好地解决这类问题吗?
答案 0 :(得分:0)
如果我明白你想做什么,你需要的是:
如果Set满足您的需要,请不要更改为Map,保持简单;)。当您需要随机访问时,地图非常有用。
答案 1 :(得分:0)
如果要在每个步骤中提取最大值,则应查看堆数据结构。 在Java Collections类中,实现堆是PriorityQueue 如果要提取最大值,则应该为构造函数提供自己的比较器,如下所示:
PriorityQueue<Symbol> pq = new PriorityQueue<Symbol>(0, new Comparator<Symbol>(){
@Override
public int compare(Symbol s1, Symbol s2) {
if (s1.getLong() < s2.getLong()) {
return 1;
} else if (s1.getLong() > s2.getLong()) {
return -1;
} else {
return 0;
}
}
});
看看比较器是如何工作的。如果s1小于s2,它应返回-1,但PriorityQueue提取最小值,而不是最大值,因此我们反转此行为。
当然,如果您只想迭代一次数据并且不要在其中插入任何内容,那么@Pablo答案会更好。