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

使用自定义比较器时最好使用TreeSet或ArrayList

陈修诚
2023-03-14
问题内容

我已经实现了一个图形。我想针对顶点
的度对给定的顶点子集进行排序。因此,我编写了一个名为的自定义比较器
DegreeComparator.

private class DegreeComparator implements Comparator<Integer>
{
    @Override
    public int compare(Integer arg0, Integer arg1) 
    {
        if(adj[arg1].size() == adj[arg0].size()) return arg1 - arg0;
        else return adj[arg1].size() - adj[arg0].size());
    }

}

So, which one of the below is more efficient?

UsingTreeSet

public Collection<Integer> sort(Collection<Integer> unsorted)
{
    Set<Integer> sorted = new TreeSet<Integer>(new DegreeComparator());
    sorted.addAll(unsorted);
    return sorted;
}

UsingArrayList

Collections.sort(unsorted, new DegreeComparator());

注意,第二种方法不是函数,而是单行代码。

凭直觉,我宁愿选择第二个。但是我不确定它是否更有效。


问题答案:

Java API包含许多Collection和Map实现,因此弄清楚要使用哪个实现可能会造成混淆。这是一个快速流程图,可能有助于
从最常见的实现中进行选择



 类似资料:
  • 我的程序实现了一个类,其对象包含以下实例变量:、、和。 在对链接列表执行任何其他操作之前,我需要对产品的链接列表进行排序。 我想先按优先级(从最低到最高)对列表进行排序。如果优先级相同,请查看价格(从低到高),然后查看名称(按字母顺序)。 我做了很多关于、和的阅读。我相信我需要使用接口并实现一个方法。我的想法是,因为、和都有一个“自然”排序,所以使用更有意义。 然后当我想对我的LinkedList

  • 我想制作一个字符串的词汇排序列表,所以我使用了基本的SortedSet 并意识到SortedSet是一个抽象类,我必须在其中实现comapartor方法。所以我去谷歌搜索,发现treeSet更好,我可以使用它预定义的比较器方法。 当我去java文档时,我意识到TreeSet扩展了AbstractSet而不是SortedSet。问题1-有人能解释一下第二行是如何工作的吗(就像我没有概括Set一样,我

  • 问题内容: 我想为汽车清单开发一个排序演示。我正在使用数据表显示汽车列表。现在实际上我想按汽车颜色对列表进行排序。这里不是按字母顺序排序的。我想使用我的自定义排序顺序,例如先是红色汽车,然后是蓝色,等等。 为此,我尝试使用,但它只允许按字母顺序排序。 因此,任何人都可以指导我实现使用该技术的方法,以便使排序变得更快。 问题答案: 我建议你为汽车颜色创建一个枚举,而不要使用字符串,并且枚举的自然顺序

  • 问题内容: 我想用自定义排序顺序在Java中创建一个。字符串排序的键需要根据第二个字符进行排序。这些值也是字符串。 样本图: 问题答案: 您可以像这样使用自定义比较器: 样品: 请注意,这只是假设字符在索引1处有一个字符。 另外,您也可以使用以下比较: 通常,此减法“技巧”是无效的,但在这里可以正常使用,因为减法2 不会溢出。 不过,上面的and 解决方案更具可读性。

  • 如果我有以下列表: 并应用以下(Java8): 然后我会得到一个带有“Hello”和“World”的列表。

  • 如何使用Comparator对对象的ArrayList进行正确排序,然后将排序后的数组传递给自定义数组适配器? 我试过这样做: ArrayList的内容类: 比较器: 在OnCreate中设置适配器: ...因为我使用的是定制的ArrayAdapter,就像: 我需要如何修改此适配器以使其与其他适配器一起工作? 谢谢你的帮助。