0

だから私はこのような HashMap を持っています:

HashMap<Movie, Float> movies;

世界的なレーティングが の映画がいくつか含まれていますfloats。映画を最高のものから最悪のものに並べ替えたいと思います。

調べてみたCollections.sort()けど、どうにかできるか分からない…

4

6 に答える 6

3

HashMap をソートすることはできません。ソートされたマップが必要な場合は、 を参照してくださいTreeMap

Movie評価値をクラスに追加して実装させるのはComparableどうですか?

public class Movie implements Comparable<Movie> {

    private Float rating;

    public Movie(Float rating) {
        this.rating = rating;
    }

    public Float getRating() {
        return rating;
    }

    public int compareTo(Movie param) {
        return param.getRating().compareTo(rating);
    }

    @Override
    public String toString() {
        return String.valueOf(rating);
    }
}

Movie次に、次のようにクラスを使用できます。

public static void main(String[] args) {

    Set<Movie> movies = new HashSet<Movie>();
    movies.add(new Movie(0.6f));
    movies.add(new Movie(0.5f));
    movies.add(new Movie(0.7f));
    movies.add(new Movie(0.2f));

    // Movie.class has to implement Comparable
    System.out.println("First option:");
    List<Movie> list = new ArrayList<Movie>(movies);
    Collections.sort(list);
    printMovies(list);

    // Works without implementing Comparable in Movie.class
    System.out.println("\nSecond option:");
    List<Movie> secondList = new ArrayList<Movie>(movies);
    Collections.sort(secondList, new Comparator<Movie>() {
        public int compare(Movie movie1, Movie movie2) {
            return movie2.getRating().compareTo(movie1.getRating());
        }
    });
    printMovies(secondList);

}

private static void printMovies(List<Movie> list) {
    for (Movie movie : list) {
        System.out.println(movie);
    }
}

出力:

First option:
0.7
0.6
0.5
0.2

Second option:
0.7
0.6
0.5
0.2

映画を常に同じ方法で並べ替えたい場合 (良いものから悪いものへ)、私は最初のオプションを選択します。常に別のソート アルゴリズムが必要な場合は、2 番目のオプションを選択しますが、Movieクラスが実装している場合でも、例に示すように常に別のアルゴリズムをComparable提供できますComparator

于 2013-05-04T17:57:02.523 に答える
2

HashMap は、達成したいデータ構造ではありません。たとえば、HashMap の詳細については、 http ://docs.oracle.com/javase/1.5.0/docs/api/java/util/HashMap.html を参照してください。

私がお勧めするのは、評価を Movie オブジェクトに含め、評価に基づいて Movie オブジェクトを比較できる Comperator を作成することです。ムービーを ArrayList に配置すると、コンパレータと Collections.sort で並べ替えることができます

于 2013-05-04T17:58:30.507 に答える
1

HashMap は、デフォルトではソートされていません。注文する必要がある場合は、を使用するTreeMapか、単純に並べ替えますList<Movie>

List<Movie> movies = new ArrayList<Movie>(); 
Collections.sort(movies, new Comparator<Movie>() {

        public int compare(Movie m1, Movie m2) {
            return m1.getRating() - m2.getRating();
        }
});
于 2013-05-04T17:57:12.347 に答える