📌  相关文章
📜  如何在Java中使用用户定义的对象对 TreeSet 进行排序?

📅  最后修改于: 2022-05-13 01:55:30.699000             🧑  作者: Mango

如何在Java中使用用户定义的对象对 TreeSet 进行排序?

比较器接口对用户定义的类的对象进行排序。 Comparator类的对象能够比较两个不同类的两个对象。以下函数将obj1obj2进行比较

  • TreeSet实现了SortedSet接口。因此,不允许重复值。
  • TreeSet 中的对象按排序和升序存储。
  • TreeSet不保留元素的插入顺序,而是按键对元素进行排序。
  • 如果我们依赖于默认的自然排序顺序,那么被插入到树中的对象应该是同类的和可比较的。 TreeSet不允许插入异构对象。它会抛出一个classCastException

由于TreeSet实现了sortedSet接口,因此默认情况下元素按升序排序。但是,如果我们想在排序中进行更改,例如按降序排列或根据姓名、分数、薪水(这些都是用户定义的类)进行排序,就像以任何方式一样。

因此,我们可以通过显式实现比较器类来解决所有这些问题

句法:

public int compare(Object obj1, Object obj2):

方法 :

  • 比较器接口用于对用户定义类的对象进行排序。
  • 该接口存在于Java.util 包中,包含 2 个方法compare (Object obj1、Object obj2)和equals (Object 元素)。
  • 使用比较器,我们可以根据数据成员对元素进行排序。例如,它可能在标记、名称或其他任何东西上。

用于对 List 元素进行排序的 Collections 类的方法用于通过给定的比较器对 List 的元素进行排序。

// To sort a given list. ComparatorClass must implement 
// Comparator interface.

public void sort(List list, ComparatorClass c)

例子:

Java
// Java program to Sort a TreeSet with
// User Defined Objects
 
import java.io.*;
import java.util.*;
class students{
   
    private int marks;
    private String name;
   
    // constructor
    public students(int value, String name)
    {
        this.marks=value;
        this.name=name;
    }
    public String getName()
    {
        return name;
    }
    public void setName(String name)
    {
        this.name= name;
    }
     
    public int getMarks()
    {
        return marks;
    }
     
}
 
// Comparator class will override the compare
// method which will compare the tw objects
// passed in the parameter
class myMarksComparator implements Comparator
{
   
    public int compare(students s1, students s2)
    {
        return s1.getMarks()-s2.getMarks();
    }
}
 
class myNameComparator implements Comparator
{
    public int compare(students s1, students s2)
    {
        return s1.getName().compareTo(s2.getName());
    }
}
 
class GFG {
 
    public static void main (String[] args){
         
        // Creating the TreeSet with Comparator object passed
        // as the parameter which will sort the user defined
        // objects of TreeSet
        TreeSet set = new TreeSet(new myMarksComparator());
         
        set.add(new students(450,"Sam"));
        set.add(new students(341,"Ronaldo"));
        set.add(new students(134,"Daniel"));
        set.add(new students(590,"George"));
         
        System.out.println("increasing Order with the Marks");
         
        // Printing the TreeSet elements
        for(students ele: set)
        {
            System.out.print(ele.getName()+" "+ele.getMarks());
            System.out.println();
        }
         
         
        TreeSet mrks= new TreeSet(new myNameComparator());
         
        mrks.add(new students(450,"Sam"));
        mrks.add(new students(341,"Ronaldo"));
        mrks.add(new students(134,"Daniel"));
        mrks.add(new students(590,"George"));
         
        System.out.println();
         
        for(students ele : mrks)
        {
            System.out.print(ele.getName() +" "+ ele.getMarks());
            System.out.println();
        }
 
    }
}


输出
-------increasing Order with the Marks
Daniel 134
Ronaldo 341
Sam 450
George 590

Daniel 134
George 590
Ronaldo 341
Sam 450