定义student 实体类,并重写compareTo() 方法。
package com.xxxx.practicetest;
public class Student implements Comparable
{
/**
* 定义一个学生类, 需要有姓名, 年龄, 考试成绩三个成员属性
* 构造bean,需要实现Comparable接口,并重写compareTo()方法,compareTo方法中定义排序的方式
*
* @param args
*/
private String nameString;
private int year;
private int scores;
/**
* @param nameString
* @param year
* @param scores
*/
public Student(String nameString, int year, int scores) {
super();
this.nameString = nameString;
this.year = year;
this.scores = scores;
}
public String getNameString() {
return nameString;
}
public void setNameString(String nameString) {
this.nameString = nameString;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public int getScores() {
return scores;
}
public void setScores(int scores) {
this.scores = scores;
}
public int compareTo(Object obj) {//
if (obj instanceof Student) {
Student foo = (Student) obj;
if (this.scores > foo.getScores()) {
return 1;
}
else if (this.scores == foo.getScores()) {
return 0;
}
else {
return -1;
}
}
return 0;
}
}
2,main 方法:
package com.xxxx.practicetest;
import java.util.Iterator;
import java.util.TreeSet;
public class test4
{
/**
* 10、 定义一个学生类, 需要有姓名, 年龄, 考试成绩三个成员属性,创建5个对象, 属性可为任意值.
* 编程对这5个对象按成绩排序,并将结果输出。 (提示,用TreeSet和Comparator实现
*
* @param args
*/
/**
* java中接口Set有众多实现类,而HashSet和TreeSet是最常用的两个,这里总结TreeSet实现排序的2种方式:
*
* 1.通过TreeSet(Comparator<? super E> comparator) 构造方法指定TreeSet的比较器进行排序;
*
* 2.使用TreeSet()构造方法,并对需要添加到set集合中的元素实现Comparable接口进行排序;
*
*
*
* 1.通过TreeSet(Comparator<? super E> comparator) 构造方法指定TreeSet的比较器进行排序;
*
* (1).构造装入TreeSet的java bean
*
* 例如:
*
* package src;
*
*
* public class Foo {
*
* private int num;
*
* public int getNum() { return num; }
*
* public void setNum(int num) { this.num = num; }
*
* public String toString() { return "foo:" + this.getNum() + ","; } }
*
*
*
* (2).自己实现比较器
*
* 例如:
*
*
* package src;
*
* import java.util.Comparator;
*
* public class MyComparator implements Comparator<Foo> {
*
* public int compare(Foo f1,Foo f2) {
*
* if (f1.getNum() > f2.getNum()) { return 1; } else if (f1.getNum() ==
* f2.getNum()) { return 0; } else { return -1; } } }
*
*
*
* (3)new TreeSet时指定比较器
*
* TreeSet<Foo> set = new TreeSet(new MyComparator());
*
* 这样在set.add()元素时就会根据自己定义比较器进行排序了
*
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Student student1 = new Student("wangyuan", 12, 67);
Student suStudent2 = new Student("fuyuan", 23, 99);
Student suStudent3 = new Student("fuyuan3", 23, 89);
Student suStudent4 = new Student("fuyuan4", 23, 79);
Student suStudent5 = new Student("fuyuan5", 23, 69);
TreeSet<Student> treeSet = new TreeSet<Student>();
// 不需要指定比较器,这样在执行set.add()方法时,set集合就自动根据bean中compareTo()方法指定的方式进行排序。
treeSet.add(student1);
treeSet.add(suStudent2);
treeSet.add(suStudent3);
treeSet.add(suStudent4);
treeSet.add(suStudent5);
Iterator<Student> iterator = treeSet.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next().getNameString());
}
}
}
输出结果:
wangyuan
fuyuan5
fuyuan4
fuyuan3
fuyuan
相关推荐
Java是全球排名第一的编程语言,Java工程师也是市场需求最大的软件工程师。 从互联网到企业平台,Java是应用最广泛的编程语言. Java是基于JVM虚拟机的跨平台语言,一次编写,到处运行; Java程序易于编写,而且有...
使用TreeSet和Comparator,编写TreeSetTest2类,要求对TreeSet中的元素1-元素10进行排列,排序逻辑为奇数在前偶数在后,奇数按照升序排列,偶数按照降序排列。 如果需要的话可以下载,有写成文章的。有写了一点中文...
`Comparator`在Java集合框架中广泛应用于`Collections.sort()`, `TreeSet`和`TreeMap`等,允许我们灵活地控制元素的排序。对于复杂的排序需求,`Comparator`是Java程序员的有力工具,它可以适应各种场景,包括处理...
在创建TreeSet时,传入一个实现了`Comparator`接口的实例,这样在进行比较时,就会使用这个Comparator的`compare(Object o1, Object o2)`方法。这允许我们根据特定的逻辑来对集合中的元素进行排序,比如按照年龄、...
在这个场景下,我们使用`TreeSet`来实现学生成绩的排序,无需额外的排序操作,这大大简化了代码并提高了效率。 首先,我们需要理解`TreeSet`的工作原理。`TreeSet`内部基于红黑树(Red-Black Tree)数据结构,这是...
本次我们关注的是Java集合框架中的三类接口:List、Set和Map,以及如何实现它们的特定功能,特别是关于`TreeSet`和`TreeMap`的按值排序。标题中提到的“JCF(List、Set、Map)学习,实现了,value>按value排序”是一个...
·拒绝晦涩难懂的呆板教学,宋老师语言生动幽默,举例形象生动深入浅出,迅速让你把握问题本质,四两拨千斤 2.课程内容推陈出新: ·基于JDK 11,将Java8、Java9、Java10、Java11新特性一网打尽 ·课程中,Eclipse...
例如,TreeSet 可以使用自然排序方式创建一个新的 TreeMap,也可以使用定制排序方式创建一个新的 TreeMap。 TreeSet 的方法主要是调用 TreeMap 的方法来提供实现。例如,TreeSet 的 addAll 方法就是调用 TreeMap 的...
在具体实现时,我们可能会创建一个`Card`类表示扑克牌,包含花色和点数属性,并重写`Comparable`接口或提供`Comparator`来确定扑克牌的排序规则。然后,创建一个`TreeSet<Card>`实例来存储和管理所有的牌。当需要...
在比较器中,比较这个计数器,从而实现排序。然后遍历排序后的`TreeSet`,显示图书信息。 在实际编码过程中,还需要考虑并发控制(如果多用户同时操作),异常处理(如书不在库中、借书卡无效等)以及可能的数据库...
`Comparator`不仅可以用于`List`的排序,还可以在其他需要比较元素的场景中发挥作用,如`TreeSet`、`PriorityQueue`以及`Arrays.sort()`等。此外,`Comparator`还支持链式调用,可以同时比较多个属性,比如先比较...
在使用 TreeSet 时,我们可以通过实现 Comparable 接口或提供Comparator 对象来指定排序规则。下面,我们将详细介绍 TreeSet 中的两种排序方式:自然排序和定制排序。 自然排序 自然排序是指通过实现 Comparable ...
定制排序:在创建TreeSet集合对象时,并提供一个Comparator接口实现类对象与该TreeSet集合关联, 由Comparator实现类对象负责集合元素的排序逻辑。 // 自定义比较器 class MyTreeSetCompartor implements...
在Java编程语言中,排序是常见的操作,而`Comparable`和`Comparator`接口则是实现对象排序的两种主要方式。这篇文章将深入探讨这两种实现方式及其在实际编程中的应用。 首先,`Comparable`接口位于`java.lang`包下...
自然顺序是指元素本身的`Comparable`接口实现,如果元素类型不实现`Comparable`,则需要在创建`TreeSet`时提供一个`Comparator`。`TreeSet`的插入、删除和查找操作的时间复杂度为O(log n),因为树结构提供了较好的...
Java中的Comparator接口是排序的关键工具,它允许程序员自定义对象的比较规则,从而在集合、数组或树结构(如TreeSet、TreeMap)中实现定制化的排序。在Java的Collections框架中,Comparator扮演着重要的角色,特别...
TreeSet则基于TreeMap实现,它维护了元素的排序顺序,可以按照自然排序或自定义比较器进行排序。默认情况下,元素会按照它们的自然顺序(即Comparable接口定义的顺序)排序,如果元素不支持自然排序,可以在创建...
Comparator<String> com = new Comparator<String>(){ public int compare(String o1,String o2) { return o1.length()-o2.length(); } }; TreeSet ts = new TreeSet(com); ts.add("string"); ts.add(...
其中,`TreeSet`是Set接口的一个实现,它内部使用了`TreeMap`的数据结构。`TreeSet`保证了其元素按照自然顺序或者自定义比较器的顺序进行排序。在`TreeSet`中,元素的唯一性是由`compareTo()`方法决定的,而不是`...
2. **自定义比较器**:如果我们需要自定义元素的排序规则,可以通过传递一个实现了`Comparator`接口的对象给`TreeSet`的构造函数来实现。`compare()`方法在这个比较器中定义了元素的比较逻辑。 3. **基本操作**:`...