亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

根據變量對自定義 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

另外,如果您需要從 獲取List,highscores那么只需:

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 關注
  • 211 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號