为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕勒3428872 2023-07-28 15:58:14
我有一个自定义 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'提前致谢。
查看完整描述

3 回答

?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

你真的仅限于使用吗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

另外,如果您需要从 获取Listhighscores那么只需:

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

这种方法的优点是:更好的灵活性和效率,因为SortedSet形成后任何查询都会花费您O(log n)O(n)时间。如果您使用,List您将始终被迫执行排序,这将需要O(n log n).


查看完整回答
反对 回复 2023-07-28
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

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


查看完整回答
反对 回复 2023-07-28
?
湖上湖

TA贡献2003条经验 获得超2个赞

您可以使用比较器,或者让您的类实现可比较的接口。

查看完整回答
反对 回复 2023-07-28
  • 3 回答
  • 0 关注
  • 170 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信