Java 按值对象属性对LinkedHashMap键集排序
我有这个LinkedHashMap,其中包含整数索引和值的对象对:Java 按值对象属性对LinkedHashMap键集排序,java,sorting,collections,linkedhashmap,Java,Sorting,Collections,Linkedhashmap,我有这个LinkedHashMap,其中包含整数索引和值的对象对: Map<Integer, Paire> population1 = new LinkedHashMap<>(); Map population1=newlinkedhashmap(); 我的Paire类相当简单,如下所示: public class Paire { float valeur; int index; public Paire(LinkedList<Som
Map<Integer, Paire> population1 = new LinkedHashMap<>();
Map population1=newlinkedhashmap();
我的Paire类相当简单,如下所示:
public class Paire {
float valeur;
int index;
public Paire(LinkedList<Sommet> liste, float valeur, int index) {
this.liste = liste;
this.valeur = valeur;
this.index = index;
}
公共类Paire{
浮阀;
整数指数;
公共对(链接列表列表、浮点值、整数索引){
this.liste=liste;
this.valeur=valeur;
这个指数=指数;
}
现在,我想在LinkedList中存储映射的键集,该键集按我的类(valeur)中的浮点值排序:
List<Integer> selection1 = new LinkedList(population1.keySet());
List selection1=newlinkedlist(population1.keySet());
我知道我可以使用Collection.sort对值进行排序,然后如果这些值是简单的字符串或数字,则可以追溯它们各自的键,但我在这里有点迷茫。
我觉得有一些简单而快速的方法可以做到这一点,而不需要中间列表和变量。此外,我的代码的执行需要尽可能快(TSP的遗传算法)。Collections.sort(selection1,new Comparator(){
@覆盖公共整数比较(整数键1、整数键2){
返回Float.compare(
population1.get(键1.valeur),population1.get(键2.valeur);
}
});
但是,如果您关心速度,LinkedList
从来都不是您的朋友。使用ArrayList
我建议使用stream(在我看来,它应该比Collections.sort快得多):
而不是
getFirst()
及
而不是
removeFirst()
因为获取和删除ArrayList的最后一个元素非常快
p.S.LinkedList几乎在任何情况下都非常慢为什么不使用带比较器的SortedMap?@LeonardBrünings
SortedMap
不处理排序值。工作非常好!谢谢。我做了很多getFirst()和removeFirst()这就是为什么我使用LIKEDLIST。无论如何谢谢你的建议!这是一个很好的建议,我真的认为<代码> LIKEDLIST < /C>只是在列表中间插入和查找项目的速度较慢。用ArrayList获取和删除更快的技巧也是非常有用的。
list.get(list.size() - 1)
getFirst()
list.remove(list.size() - 1)
removeFirst()