Java 按值对象属性对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

我有这个LinkedHashMap,其中包含整数索引和值的对象对:

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