`

treeset+Comparator 实现排序举例

 
阅读更多

定义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 + 集合 + TreeSet +定制排序

    Java是全球排名第一的编程语言,Java工程师也是市场需求最大的软件工程师。 从互联网到企业平台,Java是应用最广泛的编程语言. Java是基于JVM虚拟机的跨平台语言,一次编写,到处运行; Java程序易于编写,而且有...

    java泛型 用了treeset

    使用TreeSet和Comparator,编写TreeSetTest2类,要求对TreeSet中的元素1-元素10进行排列,排序逻辑为奇数在前偶数在后,奇数按照升序排列,偶数按照降序排列。 如果需要的话可以下载,有写成文章的。有写了一点中文...

    String,number,String+number的Comparator排序

    `Comparator`在Java集合框架中广泛应用于`Collections.sort()`, `TreeSet`和`TreeMap`等,允许我们灵活地控制元素的排序。对于复杂的排序需求,`Comparator`是Java程序员的有力工具,它可以适应各种场景,包括处理...

    解决TreeSet类的排序问题

    在创建TreeSet时,传入一个实现了`Comparator`接口的实例,这样在进行比较时,就会使用这个Comparator的`compare(Object o1, Object o2)`方法。这允许我们根据特定的逻辑来对集合中的元素进行排序,比如按照年龄、...

    学生成绩排序(TreeSet方式实现)

    在这个场景下,我们使用`TreeSet`来实现学生成绩的排序,无需额外的排序操作,这大大简化了代码并提高了效率。 首先,我们需要理解`TreeSet`的工作原理。`TreeSet`内部基于红黑树(Red-Black Tree)数据结构,这是...

    JCF(List、Set、Map)学习,实现了<key,value>按value排序噢

    本次我们关注的是Java集合框架中的三类接口:List、Set和Map,以及如何实现它们的特定功能,特别是关于`TreeSet`和`TreeMap`的按值排序。标题中提到的“JCF(List、Set、Map)学习,实现了,value&gt;按value排序”是一个...

    尚硅谷-实验:TreeSet的自然排序与定制排序.pdf

    ·拒绝晦涩难懂的呆板教学,宋老师语言生动幽默,举例形象生动深入浅出,迅速让你把握问题本质,四两拨千斤 2.课程内容推陈出新: ·基于JDK 11,将Java8、Java9、Java10、Java11新特性一网打尽 ·课程中,Eclipse...

    TreeSet 红黑树结构算法

    例如,TreeSet 可以使用自然排序方式创建一个新的 TreeMap,也可以使用定制排序方式创建一个新的 TreeMap。 TreeSet 的方法主要是调用 TreeMap 的方法来提供实现。例如,TreeSet 的 addAll 方法就是调用 TreeMap 的...

    treeset 和 hashlist 实现的扑克牌游戏

    在具体实现时,我们可能会创建一个`Card`类表示扑克牌,包含花色和点数属性,并重写`Comparable`接口或提供`Comparator`来确定扑克牌的排序规则。然后,创建一个`TreeSet&lt;Card&gt;`实例来存储和管理所有的牌。当需要...

    javaTreeSet实现图书管理系统

    在比较器中,比较这个计数器,从而实现排序。然后遍历排序后的`TreeSet`,显示图书信息。 在实际编码过程中,还需要考虑并发控制(如果多用户同时操作),异常处理(如书不在库中、借书卡无效等)以及可能的数据库...

    List对象集合的排序:比较器Comparator(简单例子)

    `Comparator`不仅可以用于`List`的排序,还可以在其他需要比较元素的场景中发挥作用,如`TreeSet`、`PriorityQueue`以及`Arrays.sort()`等。此外,`Comparator`还支持链式调用,可以同时比较多个属性,比如先比较...

    浅谈TreeSet中的两种排序方式

    在使用 TreeSet 时,我们可以通过实现 Comparable 接口或提供Comparator 对象来指定排序规则。下面,我们将详细介绍 TreeSet 中的两种排序方式:自然排序和定制排序。 自然排序 自然排序是指通过实现 Comparable ...

    java排序代码

    定制排序:在创建TreeSet集合对象时,并提供一个Comparator接口实现类对象与该TreeSet集合关联, 由Comparator实现类对象负责集合元素的排序逻辑。 // 自定义比较器 class MyTreeSetCompartor implements...

    Java中Comparable和Comparator 2种实现方式学习

    在Java编程语言中,排序是常见的操作,而`Comparable`和`Comparator`接口则是实现对象排序的两种主要方式。这篇文章将深入探讨这两种实现方式及其在实际编程中的应用。 首先,`Comparable`接口位于`java.lang`包下...

    排序之HashSet和TreeSet的区别

    自然顺序是指元素本身的`Comparable`接口实现,如果元素类型不实现`Comparable`,则需要在创建`TreeSet`时提供一个`Comparator`。`TreeSet`的插入、删除和查找操作的时间复杂度为O(log n),因为树结构提供了较好的...

    java Comparator 用法 例子

    Java中的Comparator接口是排序的关键工具,它允许程序员自定义对象的比较规则,从而在集合、数组或树结构(如TreeSet、TreeMap)中实现定制化的排序。在Java的Collections框架中,Comparator扮演着重要的角色,特别...

    HashSet和TreeSet_围墙之外

    TreeSet则基于TreeMap实现,它维护了元素的排序顺序,可以按照自然排序或自定义比较器进行排序。默认情况下,元素会按照它们的自然顺序(即Comparable接口定义的顺序)排序,如果元素不支持自然排序,可以在创建...

    TreeSet 不用自然排序自己做比较器

    Comparator&lt;String&gt; com = new Comparator&lt;String&gt;(){ public int compare(String o1,String o2) { return o1.length()-o2.length(); } }; TreeSet ts = new TreeSet(com); ts.add("string"); ts.add(...

    TreeSet判断重复元素解析及代码示例

    其中,`TreeSet`是Set接口的一个实现,它内部使用了`TreeMap`的数据结构。`TreeSet`保证了其元素按照自然顺序或者自定义比较器的顺序进行排序。在`TreeSet`中,元素的唯一性是由`compareTo()`方法决定的,而不是`...

    java 集合框架(TreeSet练习)

    2. **自定义比较器**:如果我们需要自定义元素的排序规则,可以通过传递一个实现了`Comparator`接口的对象给`TreeSet`的构造函数来实现。`compare()`方法在这个比较器中定义了元素的比较逻辑。 3. **基本操作**:`...

Global site tag (gtag.js) - Google Analytics