首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SortedSet或排序集合

SortedSet或排序集合
EN

Stack Overflow用户
提问于 2012-05-14 21:46:47
回答 3查看 5.5K关注 0票数 3

假设一个应用程序生成许多HashMap<String, MyClass>数据结构,每个数据结构包含几十到数百个MyClass类型的Comparable对象,这些对象需要在单个排序的Collection中结束。

此功能的两种可能实现返回SortedSet或排序列表,如下所示:

代码语言:javascript
复制
public static Set<MyClass> getSortedSet(HashMap<String, MyClass>... allMaps)
{
    SortedSet<MyClass> set = new TreeSet<MyClass>();

    Collection<MyClass> c;

    for (HashMap<String, MyClass> map:allMaps)
    {
        c = map.values();
        set.addAll(c);
    }

    return set;
}

public static List<MyClass> getSortedList(HashMap<String, MyClass>... allMaps)
{
    List<MyClass> list = new ArrayList<MyClass>();

    Collection<MyClass> c;

    for (HashMap<String, MyClass> map:allMaps)
    {
        c = map.values();
        list.addAll(c);
    }

    Collections.sort(list);

    return list;
}

上述两种方法中的任何一种都有明显的性能优势吗?

有没有更快的方法来实现同样的功能?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-14 22:00:38

排序列表方法的一些问题:

ArrayLists由数组支持。每当您添加一个新元素时,它可能必须在幕后增加数组。如果你想使用这种方法,你应该事先创建合适大小的ArrayList。

添加所有元素后的排序似乎不是最优的。为什么不将元素添加到列表中的正确位置?(使用排序的集合,然后转换为列表) A good Sorted List for Java

实际上,为了回答您的问题,我会采用在幕后使用TreeSet的方法。因为,如果用户愿意,他们总是可以执行Set.toArray(),然后拥有一个列表。

票数 4
EN

Stack Overflow用户

发布于 2012-05-14 21:51:05

集合和列表在本质上是不同的,因为集合不会保留重复项。一个对象只能有一个实例。列表允许您保留副本。

因此,集合做了更多的工作,因此它们更慢。

票数 2
EN

Stack Overflow用户

发布于 2012-05-14 21:55:55

有没有理由假设一种实现总是比另一种实现快?

不,没有理由假设这一点。

哪个更快取决于数据量,取决于其属性,取决于比较器的性能特征,取决于JDK,取决于JIT编译器等。

唯一确定的方法是在真实数据上对代码进行基准测试。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10584584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档