我有一個自定義 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
提交
取消