【问题标题】:Ordering a HashMap订购 HashMap
【发布时间】:2012-10-04 23:15:45
【问题描述】:

晚上好。

我需要组织一个HashMap,它是这样的:

私有HashMap>taskOrdered=newHashMap>();

每个“任务”都是一个具有 3 个属性的类:

  • 人名;
  • 小时;
  • 纪律;

我知道使用 HashMap 我可以将任务按小时分组为向量,只需将任务小时数设置为键,然后添加这些向量,或者如果存在现有向量则添加实例。

我的问题是,如何按人名排序这些向量?

我想要的一个例子:

[1]:表https://dl.dropbox.com/u/4134140/Untitled.png

希望对你有帮助:S

【问题讨论】:

    标签: java android sorting vector hashmap


    【解决方案1】:

    键 = 任务,值 = 人名

    Collections.sort(Vector, new Comparator() {

            @Override
             public int compare(Vector o1, Vector o2) {
                 return Collator.getInstance().compare(o1.getvalue(), o2.getValue());
             }
        });
    

    只是假的,可能需要进行一些调整。

    【讨论】:

    • 我已经选择了更适合我的问题的解决方案。检查达菲提示:)。不过,我要感谢您的支持! :)。
    【解决方案2】:

    HashMap 不给你任何排序。但是,我不确定您是否真的对排序感兴趣?

    您似乎想根据名称对任务进行分组?您可以通过将人员姓名插入哈希映射来获取向量来执行相同操作。如果要按名称排序检索它们,可以获取keyset(),调用java.util.Collections.sort(),然后按顺序检索向量。

    【讨论】:

    • 这个想法是对第一个集合“i”的键进行排序,并且>>>>在该“i”集合的每个值的
    • 我已经选择了更适合我的问题的解决方案。检查达菲提示:)。不过,我要感谢您的支持! :)。
    【解决方案3】:

    您可以像这样按人名订购:

    SortedMap<String, List<Task>> taskMap = new ConcurrentSkipListMap<String, List<Task>>();
    taskMap.put(task.getPerson().getName(), task);
    

    【讨论】:

    • 不会 LinkedHashMap 只使用插入顺序(或访问顺序,如果使用该构造函数)?
    • 另外,您建议使用 Task 作为键,但它是您示例中的值。我同意您的 Map> 代码(但您的回答并未反映这一点),但也许使用 TreeMap 按名称排序?
    • 嗯,这个解决方案非常适合我的问题!谢谢达菲的支持;)。
    猜你喜欢
    • 2018-06-30
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 2020-09-08
    • 2017-09-14
    • 2013-04-10
    相关资源
    最近更新 更多