按值对象属性对LinkedHashMap键集进行排序

时间:2017-06-29 20:38:17

标签: java sorting collections linkedhashmap

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

Map<Integer, Paire> population1 = new LinkedHashMap<>();

My 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;
}

现在我想存储我的地图的一个键集,按照我的类中的浮点值( valeur )排序,在LinkedList中:

List<Integer> selection1 = new LinkedList(population1.keySet());

我知道我可以使用 Collection.sort 对值进行排序,然后跟踪它们各自的键,如果这些值是简单的字符串或数字,但我在这里有点丢失。 我觉得有简单快捷的方法可以在没有中间列表和变量的情况下完成此操作。另外,我的代码执行需要尽可能快(TSP的遗传算法)。

2 个答案:

答案 0 :(得分:1)

void y(int n, int *x)
{
    int (&arr)[n] = reinterpret_cast<int (&)[n]>(*x);
}

void x(int n)
{
    int arr[n];
    y(n, arr);
}

如果你关心速度,Collections.sort(selection1, new Comparator<Integer>() { @Override public int compare(Integer key1, Integer key2) { return Float.compare( population1.get(key1).valeur, population1.get(key2).valeur); } }); 永远不是你的朋友。使用LinkedList

答案 1 :(得分:0)

我建议使用stream(在我看来,它应该比Collections.sort快得多):

List<Integer> list = population1.entrySet().stream().sorted((e1, e2) -> Float.

compare(e1.getValue().valeur,e2.getValue().valeur)).map(Map.Entry::getKey)

  .collect(Collectors.toList());
  

我做了很多getFirst()和removeFirst(),这就是我使用的原因   链表。

更好地恢复ArrayList的顺序,您可以使用:

    list.get(list.size() - 1)

而不是

 getFirst()

 list.remove(list.size() - 1)

而不是

 removeFirst()

因为获取和删除ArrayList的最后一个元素的速度非常快。

P.S。几乎在任何情况下,LinkedList都非常慢