在Java中,Hashtable本身是无序的,因此要实现自定义排序,我们可以使用TreeMap来替代Hashtable。TreeMap可以基于键的自然顺序或者通过提供一个自定义的Comparator来实现排序。
以下是一个使用TreeMap实现自定义排序的示例:
Person,并实现Comparable接口:public class Person implements Comparable<Person> {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public int compareTo(Person other) {
// 按年龄升序排序
return Integer.compare(this.age, other.age);
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
import java.util.Comparator;
public class NameComparator implements Comparator<Person> {
@Override
public int compare(Person p1, Person p2) {
// 按名字降序排序
return p2.getName().compareTo(p1.getName());
}
}
Person对象:import java.util.Map;
import java.util.TreeMap;
public class CustomSortExample {
public static void main(String[] args) {
// 使用自然顺序(按年龄升序)创建TreeMap
Map<Person, String> ageSortedMap = new TreeMap<>();
ageSortedMap.put(new Person("Alice", 30), "Alice");
ageSortedMap.put(new Person("Bob", 25), "Bob");
ageSortedMap.put(new Person("Charlie", 35), "Charlie");
System.out.println("按年龄升序排序:");
for (Map.Entry<Person, String> entry : ageSortedMap.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
// 使用自定义Comparator(按名字降序)创建TreeMap
Map<Person, String> nameSortedMap = new TreeMap<>(new NameComparator());
nameSortedMap.putAll(ageSortedMap);
System.out.println("\n按名字降序排序:");
for (Map.Entry<Person, String> entry : nameSortedMap.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
}
输出结果:
按年龄升序排序:
Person{name='Bob', age=25}: Bob
Person{name='Alice', age=30}: Alice
Person{name='Charlie', age=35}: Charlie
按名字降序排序:
Person{name='Charlie', age=35}: Charlie
Person{name='Bob', age=25}: Bob
Person{name='Alice', age=30}: Alice
这样,我们就实现了使用TreeMap对自定义对象进行排序的功能。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。