当前位置: 首页 > 面试题库 >

通过Java中的键订购HashMap的最佳方法?

郭意
2023-03-14
问题内容

这是我第一次必须订购HashMapJava。我需要通过键执行此操作,但是在我的情况下,键是一个对象,因此需要按特定字段进行排序。我自己尝试解决这个问题,我考虑过继续进行以下简单的代码编写:

private HashMap<SimpleDBField, String> sortTable(HashMap<SimpleDBField, String> row){

    LinkedHashMap<SimpleDBField, String> orderedRow = new LinkedHashMap<SimpleDBField, String>();

    for(int i = 1; i <= row.size(); i ++){
        Iterator iterator = row.entrySet().iterator();

        while(iterator.hasNext()){
            Map.Entry<SimpleDBField, String> entry = (Map.Entry<SimpleDBField, String>) iterator.next();

            if(entry.getKey().getListPosition()==i){
                orderedRow.put(entry.getKey(), entry.getValue());
                break;
            }
        }
    }

    return orderedRow;
}

假设它有效并且我不关心性能,那么在真正使用它之前,我想知道下一小段代码是否会更好,最重要:为什么?

下面的示例来自此处:如何在Java中按键和值对HashMap进行排序

public static <K extends Comparable,V extends Comparable> Map<K,V> sortByKeys(Map<K,V> map){

    List<K> keys = new LinkedList<K>(map.keySet());

    Collections.sort(keys);

    Map<K,V> sortedMap = new LinkedHashMap<K,V>();

    for(K key: keys){
        sortedMap.put(key, map.get(key));

    }

    return sortedMap;
}

如果两者都不对,该怎么办?


问题答案:

HashMap如您所见,您无法控制的排序。A
LinkedHashMap只是HashMap具有可预测的迭代顺序的a-
这是朝着正确方向迈出的一步,但仍然使事情变得过于复杂。Java具有一个用于排序地图的内置接口(名称毫不奇怪SortedMap),以及一些实现,其中最受欢迎的是TreeMap。只需使用它,让Java完成所有繁重的工作:

public static <K extends Comparable, V> Map<K,V> sortByKeys(Map<K,V> map) {
    return new TreeMap<>(map);
}


 类似资料:
  • 问题内容: 经过研究: 如何创建一个Zip文件 和一些谷歌研究,我想出了这个Java函数: 这段代码可以正常工作…但是它一点也不干净。任何人都有一个不错的主意或示例? 编辑: 如果zip归档文件的结构正确,我希望能够添加某种类型的验证…因此像普通文件一样复制它而不考虑其内容对我来说不起作用…或者您希望以后再检查它…我不确定这个 问题答案: 您只想复制完整的zip文件?不需要打开并阅读zip文件…复

  • 问题内容: 我有以下查询: 是否有根据最相关结果进行分类的策略? 问题答案: 当谈论“相关性”时,您确实想要自然语言搜索,这是MySQL全文搜索支持的。语法是比正常的不同 一样 的查询,你需要一个特殊的索引添加到表中,但排序按相关性可能是这样。 这是MySQL计算相关性的方式(来自链接): 如前面的示例所示,在WHERE子句中使用MATCH()时,返回的行将自动按照相关性最高的顺序进行排序。相关性

  • 问题内容: 我想知道Java在添加项目时如何在(或)中对项目进行排序。密钥是按哈希码,内存引用还是分配优先级排序的? 这是因为我注意到中的相同对并不总是以相同的顺序排列 问题答案: 无序的 您不能也不应承担任何其他责任。 此类无法保证地图的顺序。特别是,它不能保证顺序会随着时间的推移保持恒定。 使用插入顺序。 此实现的不同之处在于,它维护一个遍历其所有条目的双向链接列表。此链表定义了迭代顺序,通常

  • 问题内容: 如何按两列对MySQL表进行排序? 我想要的是文章,首先是最高评分,然后是最新日期。例如,这将是一个示例输出(左#是评分,然后是文章标题,然后是文章日期) 我正在使用的相关SQL是: 我可以按一个或另一个排序,但不能两个都排序。 问题答案: 默认排序是递增的,您需要在两个订单中都添加关键字DESC:

  • 问题内容: 我想用 gulp.js 观看目录中的所有内容,但.min.ext文件 除外 。过滤掉这些的最佳方法是什么? 例: 编辑: 如果没有外部软件包就无法完成,哪一个是最有名的? 问题答案: 内部使用(请参阅源代码),内部使用,自身使用,因此您应该能够使用忽略某些文件。 实际上,甚至在vinyl-fs的自述文件中对此进行了描述: