public class zad9_1 {
public static void main(String[] args) {
User u=new User("James","Williams",15,"james123","123456");
System.out.println(u.toString());
}
}
class Person implements Comparable<Person>{
private String firstName;
private String lastName;
private static final Collator collator=Collator.getInstance(Locale.getDefault());
private final CollationKey sortLastNameKey;
private final CollationKey sortFirstNameKey;
private int age;
public Person(String firstName,String lastName,int age) {
if(firstName==null || lastName==null)
throw new NullPointerException();
this.firstName=firstName;
this.lastName=lastName;
this.age=age;
sortLastNameKey=collator.getCollationKey(lastName+firstName);
sortFirstNameKey=collator.getCollationKey(firstName+lastName);
}
public CollationKey getFirstNameKey() {
return sortFirstNameKey;
}
public CollationKey getLastNameKey() {
return sortLastNameKey;
}
public int getAge() {
return this.age;
}
public int compareTo(Person p) {
if(this.getAge()<p.getAge())
return -1;
else if(this.getAge()==p.getAge())
return 0;
else
return 1;
}
public String toString(){
return firstName+" "+lastName+" "+age;
}
}
class LastNameComparator implements Comparator{
public int compare(Object person,Object other) {
return ((Person)person).getLastNameKey().compareTo(((Person)other).getLastNameKey());
}
}
class FirstNameComparator implements Comparator{
public int compare(Object person,Object other) {
return ((Person)person).getFirstNameKey().compareTo(((Person)other).getFirstNameKey());
}
}
class User extends Person implements Comparable<Person>{
private String username;
private String password;
public User(String firstName,String lastName,int age,String username,String password) {
super(firstName,lastName,age);
this.username=username;
this.password=password;
}
public String getUsername() {
return this.username;
}
public String getPassword() {
return this.password;
}
public void setUsername(String username) {
this.username=username;
}
public void setPassword(String password) {
this.password=password;
}
public boolean equals(Object obj) {
if(!(obj instanceof User))
return false;
User u=(User)obj;
return this.getUsername().equals(u.getUsername())
&& this.getPassword().equals(u.getPassword())
&& this.getAge()==u.getAge();
}
public String toString() {
return username+" "+this.getFirstNameKey()+" "+this.getLastNameKey()+" "+this.getAge();
}
public int compareTo(User u) {
if(this.getUsername().compareTo(u.getUsername())<0
&& this.getPassword().compareTo(u.getPassword())<0
&& this.getAge()-u.getAge()<0)
return -1;
else if(this.getUsername().compareTo(u.getUsername())==0
&& this.getPassword().compareTo(u.getPassword())==0
&& this.getAge()-u.getAge()==0)
return 0;
else
return 1;
}
}
class UsersGroup{
private String groupName;
private List<User>users;
public UsersGroup() {}
public UsersGroup(String groupName) {
this.groupName=groupName;
}
public void addUser(User u) {
users.add(u);
}
public void sortByLastName() {
Collections.sort(users,new LastNameComparator());
}
public void sortByFirstName() {
Collections.sort(users,new FirstNameComparator());
}
public void sortByUserPass() {
Collections.sort(users);
}
}
我试图首先在User类的主函数中创建对象,然后创建Users列表,最后使用该列表创建UsersGroup类的对象并测试其排序功能。在我的任务中,我应该使用这些排序规则和排序规则键,但实际上我发现它们真的很难理解。在我的代码中,您将看到在主要功能中,我试图创建User类的对象,但是当我打印它时,它显示了奇怪的输出。我敢肯定这是由于排序规则和排序规则键所致,如果有人可以向我展示正确的操作方法,我将不胜感激!这是输出:james123 java.text.RuleBasedCollationKey@dec40ca java.text.RuleBasedCollationKey@109a432e 15
按给定的方式修改User类中的toString()方法:
public String toString() {
return username+" "+this.getFirstNameKey().getSourceString()+" "+this.getLastNameKey().getSourceString()+" "+this.getAge();
}
您直接在toString中使用CollationKey对象(这就是为什么它打印RuleBasedCollationKey @ hex_hashcode,即className @ HEX_hashcode的原因,而应该使用其getSourceString方法。
也不需要调用u.toString(),在您的情况下,您可以在主要方法中直接使用System.out.println(u);
希望有帮助!