有没有一种有效的方法来排序参数图?

时间:2014-01-23 09:25:13

标签: java hashmap

我有一个从网络表单中的帖子传入的参数图。我遇到的问题是我想要对键值进行排序。

我有两个密钥传入j_idt40:j_idt41:0:scorej_idt40:j_idt41:0:scoreID这些我想要找到而不需要在我再次迭代的每一行中循环遍历地图。有一个更好的方法吗?

j_idt40:j_idt69 = Uppdatera
j_idt40:j_idt41:3:score = 200
j_idt40:j_idt41:0:scoreID = 1
j_idt40:j_idt41:4:scoreID = 
j_idt40:j_idt41:3:scoreID = 4
j_idt40:j_idt41:2:scoreID = 3
j_idt40:j_idt41:0:score = 203
j_idt40:j_idt41:2:score = 200
j_idt40:j_idt41:1:score = 200
j_idt40 = j_idt40
j_idt40:j_idt41:4:score = 800
j_idt40:j_idt41:1:scoreID = 2

4 个答案:

答案 0 :(得分:2)

自然分类你需要编写自己的比较器。 jdk中的现有比较器将在以下情况下失败。

TreeMap<String,String> treeMap = new TreeMap<String, String>();
treeMap.put("key1", "value"); 
treeMap.put("key2", "value");
treeMap.put("key20", "value");
treeMap.put("key10", "value");
treeMap.put("key11", "value");      
treeMap.put("key21", "value");

排序将像这样发生。

KEY1,key10,key11,KEY2,key20,key21

自然排序在Java 8中实现,请参阅here

使用apache commons ComparatorUtils.NATURAL_COMPARATOR

答案 1 :(得分:0)

TreeMap会在这方面为您提供帮助吗?

TreeMap保持一切排序。这是Java集合API中的内置类。

您可以使用此构造函数将地图转换为有序地图。

TreeMap(Map  m)  // this is from 'java.util.TreeMap'

答案 2 :(得分:0)

您可以将所有Map.Entries拉出到列表中,对其进行排序,然后循环一次。你必须为Map.Entries建立一个比较器。

答案 3 :(得分:0)

您可以按如下方式对键进行排序:

    Collection<?> keys = params.keySet();
    String[] array = keys.toArray(new String[keys.size()]);
    Arrays.sort(array);

或者如果您想要订购地图的条目,您可以通过将它们插入TreeMap来实现。当您迭代TreeMap的键集时,它们会按顺序出现。

哪种方法更“高效”取决于您所谈论的效率衡量标准(CPU,内存,开发人员时间)。

它还取决于应用程序执行各种操作的频率。例如:

    对于O(1),{li>查找,插入和删除操作平均为HashMap,对于TreeMap,<{1}}
  • 迭代TreeMap的密钥集是O(logN)
  • 提取和排序Hashmap的密钥为O(N)