当前位置: 首页 > 知识库问答 >
问题:

对ArrayList使用集合排序

法子昂
2023-03-14
class UnfairContainer<T> implements Comparable<UnfairContainer>
{    
    private ArrayList<T> array = new ArrayList<T>();

    public void sort()
    {
        Collections.sort(array);
    }

    public int compareTo(UnfairContainer o)
    {

    }
}

因此,我有实现comparable的类,但当我试图创建调用Collections.sort()的排序方法时,它给出了一个错误,说明我不能用ArrayList调用collection sort。有人能帮忙吗?并且帮助我使用compareTo方法,我仍然停留在如何比较ArrayList中的每个元素上

共有1个答案

红甫
2023-03-14

问题是不能保证列表是可排序的。这是因为在当前的设置下,t可以是任何东西--包括一个不实现comparable的类,因此不能按集合排序。collections.sort()的类型签名反映了这一点:

public static <T extends Comparable<? super T>> void sort(List<T> list);

要解决这个问题,您需要为T设置一个上限,以确保它是可排序的:

class UnfairContainer<T extends Comparable<T> > 
        implements Comparable<UnfairContainer<T> >
{

...

T extends comparable 意味着T必须是实现comparable的类。这让集合知道ArrayList是可以排序的,并且一切都正常工作。

 类似资料:
  • 问题内容: 在我正在使用的代码下面,可以正常工作并输出名称,但不能使用sort方法。我期望“ Collections.sort(nameFromText);” 按名字的字母顺序对ArrayList进行排序。 我究竟做错了什么? 问题答案: 方法期望要排序的列表元素具有可比性。元素类型应该实现接口,或者您应该使用带有通用实例的重载方法。 在下面的代码中,您不满足上述两个条件。您的类既没有实现,也没有

  • 下面我使用的代码工作正常,并输出名称,但排序方法不起作用。我需要“Collections.sort(nameFromText);”按名字的字母顺序对ArrayList排序。 我做错了什么?

  • 问题内容: 对于这个愚蠢的问题,我感到抱歉,我一直在搜索如何在我的ArrayList中使用binarysearch,如下所示: 问题是当我使用时: indeks的值始终为-5,我认为应该为2,因为在反转myArrList之后,输出看起来像这样: 那么,在这里我该怎么做才能获得7的正确债款?提前致谢 问题答案: 期望元素按升序排列: 在进行此调用之前,必须根据列表元素的自然顺序将其按升序排序(例如通

  • 问题内容: 如果我有一个简单的字符串列表: 我可以对它进行排序: 但是假设我有一个Person类: 并列出: 我想有时按名称,有时按年龄,有时按国家对它进行排序。 最简单的方法是什么? 我知道我可以实现Comparable接口,但这似乎限制了我只能通过一个特定的属性对其进行排序。 问题答案: 可以使用自定义比较器调用Collections.sort。并且该比较器可以实现为允许以不同的排序顺序进行排

  • 我有一个,其中具有字符串值,其中包含名称,然后将double转换为字符串。

  • 我需要整理一份arrayList。我可以使用比较器并重写比较函数进行排序。或者我可以自己编写一个合并排序函数,对ArrayList进行排序。 我在某处读到比较器排序使用冒泡排序算法。因为合并排序的复杂度较低,所以我选择合并排序,而不是使用更容易实现的比较器。