根据变量对自定义 Java 类的数组列表进行排序

我有一个自定义 Java 类,其中包含两个变量:username和score。


我正在创建一个 ArrayList,其中包含多个。然后我想根据它们的值按从低到高的顺序对它们进行排序score


高分班


public class Highscore implements ConfigurationSerializable {


    String username;

    int score;


    public Highscore(String username, int score) {

        this.username = username;

        this.score = score;

    }


    public String getUsername() {

        return username;

    }


    public void setUsername(String username) {

        this.username = username;

    }


    public int getScore() {

        return score;

    }


    public void setScore(int score) {

        this.score = score;

    }


    @Override

    public Map<String, Object> serialize() {

        Map<String, Object> mappedObject = new LinkedHashMap<String, Object>();

        mappedObject.put("username", username);

        mappedObject.put("score", score);

        return mappedObject;

    }


    public static Highscore deserialize(Map<String, Object> mappedObject) {

        return new Highscore((String) mappedObject.get("username"),

                (int) mappedObject.get("score"));

    }

}

例如,下面显示了包含多个 的 ArrayList Highscore。我只想查看score基于从低到高的 ,然后将Highscore' 排序到另一个 ArrayList 中。


ArrayList<Highscore> highscores = new ArrayList<>();

highscores.add(new Highscore("user1", 10));

highscores.add(new Highscore("user2", 0));

highscores.add(new Highscore("user3", -15));

highscores.add(new Highscore("user4", 30));

highscores.add(new Highscore("user5", 5));


// Now, sort the highscores based on their 'score'

提前致谢。


慕勒3428872
浏览 171回答 3
3回答

扬帆大鱼

你真的仅限于使用吗List?IMOSortedSet更适合您的目标。您可以使用TreeSet 注意,TreeSet元素是使用其自然顺序或通过在设置创建时间提供的比较器进行排序的。此外,它还log(n)为基本操作(添加、删除和包含)提供了有保证的时间成本,因此计算效率非常高。例如,您可以执行以下操作:SortedSet<Highscore> highscores =   new TreeSet<>(Comparator.comparingInt(highscore -> highscore.score)); highscores.add(new Highscore("user1", 10)); highscores.add(new Highscore("user2", 0)); highscores.add(new Highscore("user3", -15)); highscores.add(new Highscore("user4", 30)); highscores.add(new Highscore("user5", 5));现在highscores包含按升序排序的所有对象score。另外,如果您需要从 获取List,highscores那么只需:List<Highscore> highscoreList = new ArrayList<>(highscores);这种方法的优点是:更好的灵活性和效率,因为SortedSet形成后任何查询都会花费您O(log n)或O(n)时间。如果您使用,List您将始终被迫执行排序,这将需要O(n log n).

犯罪嫌疑人X

public&nbsp;class&nbsp;CustomComparator&nbsp;implements&nbsp;Comparator<Highscore>&nbsp; {&nbsp;&nbsp;&nbsp;public&nbsp;int&nbsp;compare(HighScore&nbsp;h1,&nbsp;HighScore&nbsp;h2)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;h1.getScore().compareTo(h2.getScore()); &nbsp;&nbsp;&nbsp;} }

湖上湖

您可以使用比较器,或者让您的类实现可比较的接口。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java