繁体   English   中英

在java中为元组计数排序

[英]Counting sort in java for tuples

我正在构建一个具有字符串到整数的映射的类。 所以,如果我有3个苹果,我会将苹果映射到3个。

我需要编写一个类,通过减少数字来排序对象的名称。

所以,如果我有

(苹果,3)(橙子,2)(香蕉,5)

我会得到(香蕉,5),(苹果,3),(橙子2)

我想知道是否已经有一个课程可以让我的生活更轻松,或者我将如何实现这一点。

谢谢。

您应该能够将对象(苹果,3)(橙子,2)(香蕉,5)放入List中,然后调用Collections.sort(yourlist)。 然后,您需要确保声明的对象实现Comparable接口。

有关更多信息,请访问http://java.sun.com/docs/books/tutorial/collections/interfaces/order.html

假设你宣称你反对为

public class FruitAndCount implements Comparable<FruitAndCount> {
    private final String name;
    private final Integer count;

    public FruitAndCount(String name, int count) {
        this.name = name;
        this.count = count;
    }

    public String name() { return name;  }
    public int count()   { return count; }

    public int compareTo(FruitAndCount o) {
        return this.count.compareTo(o.count);
    }
}

然后,您应该能够进行以下调用,对您的列表进行排序:

FruitAndCount fruitArray[] = {
    new FruitAndCount("Apples", 3),
    new FruitAndCount("Oranges", 2),
    new FruitAndCount("Bananas", 5)
};

List<FruitAndCount> fruit = Arrays.asList(fruitArray);
Collections.sort(fruit);

然后你应该有一个排序的水果列表。

能够使类实现Comparable总是很好,但有时你不能,或者它是不可取的(例如,如果你需要能够以不同的方式比较同一类型,基于不同的属性)。

在这种情况下,建议使用重载的Collections.sort()方法,它接受List<T>进行排序,并使用Comparator<T>来确定对象的排序方式。 这比从旧元组中创建新元组要清晰得多,并且比实现Comparable (这也是一个有效的解决方案)更灵活。

你真的想看看TreeMap

假设计数是唯一的,您只需反转元组,将计数作为键存储,将水果的名称存储为值。 然后,TreeMap按键值存储按升序排序的项目,您可以返回值。 由于在插入时完成排序,因此检索时间非常短。

如果您有非唯一计数,那么这里有一个简单的解决方案 ,可以让您利用TreeMap。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM