我有一个自定义 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
。
另外,如果您需要从 获取List
,highscores
那么只需:
List<Highscore> highscoreList = new ArrayList<>(highscores);
这种方法的优点是:更好的灵活性和效率,因为SortedSet
形成后任何查询都会花费您O(log n)
或O(n)
时间。如果您使用,List
您将始终被迫执行排序,这将需要O(n log n)
.
犯罪嫌疑人X
TA贡献2080条经验 获得超4个赞
public class CustomComparator implements Comparator<Highscore> { public int compare(HighScore h1, HighScore h2) { return h1.getScore().compareTo(h2.getScore()); } }
添加回答
举报
0/150
提交
取消