From a23b7c0468b872f066e9390dab51dd22f06382b6 Mon Sep 17 00:00:00 2001 From: LatteCosmos Date: Wed, 14 Jan 2026 22:39:50 +1100 Subject: [PATCH] Using composite ordering to fix the problem --- .../java/com/github/hcsp/polymorphism/User.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/github/hcsp/polymorphism/User.java b/src/main/java/com/github/hcsp/polymorphism/User.java index 7a601df..31a1c31 100644 --- a/src/main/java/com/github/hcsp/polymorphism/User.java +++ b/src/main/java/com/github/hcsp/polymorphism/User.java @@ -1,9 +1,6 @@ package com.github.hcsp.polymorphism; -import java.util.Arrays; -import java.util.List; -import java.util.Objects; -import java.util.TreeSet; +import java.util.*; public class User implements Comparable { /** 用户ID,数据库主键,全局唯一 */ @@ -12,7 +9,7 @@ public class User implements Comparable { /** 用户名 */ private final String name; - public User(Integer id, String name) { + public User(Integer id, String name) { // 构造器 this.id = id; this.name = name; } @@ -47,7 +44,11 @@ public int hashCode() { /** 老板说让我按照用户名排序 */ @Override public int compareTo(User o) { - return name.compareTo(o.name); + int nameCompare = name.compareTo(o.getName()); + if (nameCompare != 0) { + return nameCompare; // name 不同:按 name 排序 + } + return id.compareTo(o.getId()); // name 相同:按 id 排序(避免被当作重复) } public static void main(String[] args) { @@ -57,8 +58,8 @@ public static void main(String[] args) { new User(10, "z"), new User(1, "a"), new User(2000, "a")); + TreeSet treeSet = new TreeSet<>(users); - // 为什么这里的输出是3?试着修复其中的bug System.out.println(treeSet.size()); } }