我有一個(gè)自定義 Java 類(lèi),其中包含兩個(gè)變量:username和score。我正在創(chuàng)建一個(gè) ArrayList,其中包含多個(gè)。然后我想根據(jù)它們的值按從低到高的順序?qū)λ鼈冞M(jìn)行排序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")); }}例如,下面顯示了包含多個(gè) 的 ArrayList Highscore。我只想查看score基于從低到高的 ,然后將Highscore' 排序到另一個(gè) 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 回答

揚(yáng)帆大魚(yú)
TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超9個(gè)贊
你真的僅限于使用嗎List
?
IMOSortedSet
更適合您的目標(biāo)。您可以使用TreeSet
?注意,TreeSet
元素是使用其自然順序或通過(guò)在設(shè)置創(chuàng)建時(shí)間提供的比較器進(jìn)行排序的。此外,它還log(n)
為基本操作(添加、刪除和包含)提供了有保證的時(shí)間成本,因此計(jì)算效率非常高。
例如,您可以執(zhí)行以下操作:
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));
現(xiàn)在highscores
包含按升序排序的所有對(duì)象score
。
另外,如果您需要從 獲取List
,highscores
那么只需:
List<Highscore>?highscoreList?=?new?ArrayList<>(highscores);
這種方法的優(yōu)點(diǎn)是:更好的靈活性和效率,因?yàn)?code>SortedSet形成后任何查詢(xún)都會(huì)花費(fèi)您O(log n)
或O(n)
時(shí)間。如果您使用,List
您將始終被迫執(zhí)行排序,這將需要O(n log n)
.

犯罪嫌疑人X
TA貢獻(xiàn)2080條經(jīng)驗(yàn) 獲得超4個(gè)贊
public class CustomComparator implements Comparator<Highscore> { public int compare(HighScore h1, HighScore h2) { return h1.getScore().compareTo(h2.getScore()); } }
添加回答
舉報(bào)
0/150
提交
取消