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

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

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

LinkedHashSet 是 HashSet 的有序版本,它在Java.util 包中存在的所有元素之间维护一个双向链表。当需要维护迭代顺序时,使用该类。

例子

Input : Student = {{"c",2},{"b",1},{"a",3}}
Output: 
Sort by name = {{"a",3},{"b",1},{"c",2}}
Sort by rollNo = {{"b",1},{"c",2},{"a",3}}

方法一:

在示例中,没有使用自定义类,而是使用了Java的包装类,如 Integer、Double、Float 等,使用 TreeSet 对 LinkedHashSet 进行排序。为此,将 LinkedHashSet 元素转换为 TreeSet 并可以通过三种不同的方式执行此操作:-

  1. 通过使用 TreeSet 的构造函数。
  2. 通过使用 for 循环和 add() 方法。
  3. 通过使用 addAll() 方法。

执行:

Java
// Java Program to sort LinkedHashSet of custom
// class objects using TreeSet
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.TreeSet;
  
public class GFG {
  
    public static void main(String[] args)
    {
        // creating a LinkedHashSet
        LinkedHashSet lset0 = new LinkedHashSet<>();
  
        // adding elements to LinkedHashSet
        lset0.add(1.009);
        lset0.add(1.10);
        lset0.add(1.01);
        lset0.add(1.019);
  
        // creating a TreeSet
        // and adding LinkedHashSet element to TreeSet
        // using the constructor of the TreeSet
        TreeSet tset0 = new TreeSet<>(lset0);
  
        // Displaying the output
        System.out.println("Sorted Set(ascending): "
                           + tset0);
  
        // creating a LinkedHashSet
        LinkedHashSet lset1
            = new LinkedHashSet<>();
  
        // adding elements to LinkedHashSet
        lset1.add(10);
        lset1.add(7);
        lset1.add(2);
        lset1.add(20);
  
        // creating TreeSet
        TreeSet tset1 = new TreeSet<>();
  
        // adding LinkedHashSet element to TreeSet
        // using for loop and add() method
        for (Integer i : lset1)
            tset1.add(i);
  
        // Displaying the output
        System.out.println("Sorted Set(ascending): "
                           + tset1);
  
        // creating LinkedHashSet
        LinkedHashSet lset2
            = new LinkedHashSet<>();
  
        // adding elements to the LinkedHashSet
        lset2.add('s');
        lset2.add('h');
        lset2.add('i');
        lset2.add('n');
  
        // creating a TreeSet
        TreeSet tset2 = new TreeSet<>();
  
        // adding LinkedHashSet element to TreeSet
        // element using addAll() method
        tset2.addAll(lset2);
        System.out.println("Sorted Set(ascending): "
                           + tset2);
  
        // creating a LinkedHashSet
        LinkedHashSet lset3 = new LinkedHashSet<>();
  
        // adding elements to the
        // LinkedHashSet
        lset3.add("Sandra");
        lset3.add("Shishya");
        lset3.add("Sarthak");
        lset3.add("Sarah");
        lset3.add("Sagar");
        lset3.add("Sashi");
        lset3.add("Sonika");
  
        // creating a TreeSet but this time it will
        // sort it in descending order
        // so for sorting in descending order
        // we will use Collections.reverseOrder() in
        // the constructor of TreeSet
        TreeSet tset3
            = new TreeSet<>(Collections.reverseOrder());
  
        // adding elements of LinkedHashSet to treeSet
        // using addAll() method
        tset3.addAll(lset3);
  
        // Displaying output
        System.out.println("Sorted Set(descending): "
                           + tset3);
    }
}


Java
Java Program to sort LinkedHashSet of custom
// class objects using TreeSet
import java.util.Comparator;
import java.util.LinkedHashSet;
import java.util.TreeSet;
  
class friendsMarks {
  
    // class field
    String name;
    String nickName;
    int marks;
  
    // parameterised constructor
    public friendsMarks(String name, String nickName,
                        int marks)
    {
        this.name = name;
        this.nickName = nickName;
        this.marks = marks;
    }
  
    // getter for name
    public String getName() { return name; }
  
    // setter for name
    public void setName(String name) { this.name = name; }
  
    // getter for marks
    public int getMarks() { return marks; }
  
    // setter for marks
    public void setMarks(int marks) { this.marks = marks; }
  
    // getter for nickname
    public String getNickName() { return nickName; }
  
    // setter for nickname
    public void setNickName(String nickName)
    {
        this.nickName = nickName;
    }
  
    //@Override toString method
    public String toString()
    {
        return "friendsMarks{"
            + "name='" + name + '\'' + ", nickName='"
            + nickName + '\'' + ", marks=" + marks + '}';
    }
}
  
// for comparing names
class nameCompare implements Comparator {
  
    @Override
    public int compare(friendsMarks friend1,
                       friendsMarks friend2)
    {
        return friend1.getName().compareTo(
            friend2.getName());
    }
}
  
// for comparing nick name
class nickNameCompare implements Comparator {
  
    @Override
    public int compare(friendsMarks obj1, friendsMarks obj2)
    {
        return obj1.getNickName().compareTo(
            obj2.getNickName());
    }
}
  
// for comparing marks
class marksCompare implements Comparator {
  
    @Override
    public int compare(friendsMarks f1, friendsMarks f2)
    {
        if (f1.getMarks() > f2.getMarks()) {
            return 1;
        }
        else {
            return -1;
        }
    }
}
public class Main {
  
    public static void main(String[] args)
    {
  
        // Creating LinkedHashSet
        LinkedHashSet linkedHashSet
            = new LinkedHashSet<>();
  
        // adding elements to LinkedHashSet
        linkedHashSet.add(
            new friendsMarks("Raushan", "Chamgader", 99));
        linkedHashSet.add(
            new friendsMarks("Yashdeep", "Dopa", 95));
        linkedHashSet.add(
            new friendsMarks("Rupesh", "Gian", 92));
        linkedHashSet.add(
            new friendsMarks("Shishya", "Gorilla", 47));
        linkedHashSet.add(
            new friendsMarks("Sarthak", "Nagin", 78));
        linkedHashSet.add(
            new friendsMarks("Sonika", "Chipkali", 67));
        linkedHashSet.add(
            new friendsMarks("Himanshu", "Lalten", 57));
  
        // Creating TreeSet
        // and we have to pass Comparator object
        // of marksCompare class
        // in the TreeSet constructor
        // so that we can sort according to the marks
        TreeSet treeSet0
            = new TreeSet<>(new marksCompare());
  
        // storing elements of LinkedHashSet
        // into TreeSet by using method addAll()
        treeSet0.addAll(linkedHashSet);
        System.out.println("Sorting on the basis of marks");
  
        // Displaying using loop
        for (friendsMarks tree : treeSet0)
            System.out.println(tree);
  
        // Creating TreeSet
        // and we have to pass Comparator object
        // of nameCompare class
        // in the TreeSet constructor
        // so that we can sort according to the name
        TreeSet treeSet1
            = new TreeSet<>(new nameCompare());
  
        // storing elements of LinkedHashSet
        // into TreeSet by using method addAll()
        treeSet1.addAll(linkedHashSet);
  
        // Displaying using loop
        System.out.println(
            "\n\nSorting on the basis of name");
        for (friendsMarks tree : treeSet1)
            System.out.println(tree);
  
        // Creating TreeSet
        // and we have to pass Comparator object
        // of nickNameCompare class
        // in the TreeSet constructor
        // so that we can sort according to the nickname
        TreeSet treeSet2
            = new TreeSet<>(new nickNameCompare());
  
        // storing elements of LinkedHashSet
        // into TreeSet by using method addAll()
        treeSet2.addAll(linkedHashSet);
  
        // Displaying using loop
        System.out.println(
            "\n\nSorting on the basis of nick-name");
        for (friendsMarks tree : treeSet2)
            System.out.println(tree);
    }
}


输出
Sorted Set(ascending): [1.009, 1.01, 1.019, 1.1]
Sorted Set(ascending): [2, 7, 10, 20]
Sorted Set(ascending): [h, i, n, s]
Sorted Set(descending): [Sonika, Shishya, Sashi, Sarthak, Sarah, Sandra, Sagar]

方法二:

这里使用了 Comparator 接口。比较器接口用于对用户定义的类的对象进行排序。比较器对象能够比较两个不同类的两个对象。

执行:

Java

Java Program to sort LinkedHashSet of custom
// class objects using TreeSet
import java.util.Comparator;
import java.util.LinkedHashSet;
import java.util.TreeSet;
  
class friendsMarks {
  
    // class field
    String name;
    String nickName;
    int marks;
  
    // parameterised constructor
    public friendsMarks(String name, String nickName,
                        int marks)
    {
        this.name = name;
        this.nickName = nickName;
        this.marks = marks;
    }
  
    // getter for name
    public String getName() { return name; }
  
    // setter for name
    public void setName(String name) { this.name = name; }
  
    // getter for marks
    public int getMarks() { return marks; }
  
    // setter for marks
    public void setMarks(int marks) { this.marks = marks; }
  
    // getter for nickname
    public String getNickName() { return nickName; }
  
    // setter for nickname
    public void setNickName(String nickName)
    {
        this.nickName = nickName;
    }
  
    //@Override toString method
    public String toString()
    {
        return "friendsMarks{"
            + "name='" + name + '\'' + ", nickName='"
            + nickName + '\'' + ", marks=" + marks + '}';
    }
}
  
// for comparing names
class nameCompare implements Comparator {
  
    @Override
    public int compare(friendsMarks friend1,
                       friendsMarks friend2)
    {
        return friend1.getName().compareTo(
            friend2.getName());
    }
}
  
// for comparing nick name
class nickNameCompare implements Comparator {
  
    @Override
    public int compare(friendsMarks obj1, friendsMarks obj2)
    {
        return obj1.getNickName().compareTo(
            obj2.getNickName());
    }
}
  
// for comparing marks
class marksCompare implements Comparator {
  
    @Override
    public int compare(friendsMarks f1, friendsMarks f2)
    {
        if (f1.getMarks() > f2.getMarks()) {
            return 1;
        }
        else {
            return -1;
        }
    }
}
public class Main {
  
    public static void main(String[] args)
    {
  
        // Creating LinkedHashSet
        LinkedHashSet linkedHashSet
            = new LinkedHashSet<>();
  
        // adding elements to LinkedHashSet
        linkedHashSet.add(
            new friendsMarks("Raushan", "Chamgader", 99));
        linkedHashSet.add(
            new friendsMarks("Yashdeep", "Dopa", 95));
        linkedHashSet.add(
            new friendsMarks("Rupesh", "Gian", 92));
        linkedHashSet.add(
            new friendsMarks("Shishya", "Gorilla", 47));
        linkedHashSet.add(
            new friendsMarks("Sarthak", "Nagin", 78));
        linkedHashSet.add(
            new friendsMarks("Sonika", "Chipkali", 67));
        linkedHashSet.add(
            new friendsMarks("Himanshu", "Lalten", 57));
  
        // Creating TreeSet
        // and we have to pass Comparator object
        // of marksCompare class
        // in the TreeSet constructor
        // so that we can sort according to the marks
        TreeSet treeSet0
            = new TreeSet<>(new marksCompare());
  
        // storing elements of LinkedHashSet
        // into TreeSet by using method addAll()
        treeSet0.addAll(linkedHashSet);
        System.out.println("Sorting on the basis of marks");
  
        // Displaying using loop
        for (friendsMarks tree : treeSet0)
            System.out.println(tree);
  
        // Creating TreeSet
        // and we have to pass Comparator object
        // of nameCompare class
        // in the TreeSet constructor
        // so that we can sort according to the name
        TreeSet treeSet1
            = new TreeSet<>(new nameCompare());
  
        // storing elements of LinkedHashSet
        // into TreeSet by using method addAll()
        treeSet1.addAll(linkedHashSet);
  
        // Displaying using loop
        System.out.println(
            "\n\nSorting on the basis of name");
        for (friendsMarks tree : treeSet1)
            System.out.println(tree);
  
        // Creating TreeSet
        // and we have to pass Comparator object
        // of nickNameCompare class
        // in the TreeSet constructor
        // so that we can sort according to the nickname
        TreeSet treeSet2
            = new TreeSet<>(new nickNameCompare());
  
        // storing elements of LinkedHashSet
        // into TreeSet by using method addAll()
        treeSet2.addAll(linkedHashSet);
  
        // Displaying using loop
        System.out.println(
            "\n\nSorting on the basis of nick-name");
        for (friendsMarks tree : treeSet2)
            System.out.println(tree);
    }
}
输出
Sorting on the basis of marks
friendsMarks{name='Shishya', nickName='Gorilla', marks=47}
friendsMarks{name='Himanshu', nickName='Lalten', marks=57}
friendsMarks{name='Sonika', nickName='Chipkali', marks=67}
friendsMarks{name='Sarthak', nickName='Nagin', marks=78}
friendsMarks{name='Rupesh', nickName='Gian', marks=92}
friendsMarks{name='Yashdeep', nickName='Dopa', marks=95}
friendsMarks{name='Raushan', nickName='Chamgader', marks=99}


Sorting on the basis of name
friendsMarks{name='Himanshu', nickName='Lalten', marks=57}
friendsMarks{name='Raushan', nickName='Chamgader', marks=99}
friendsMarks{name='Rupesh', nickName='Gian', marks=92}
friendsMarks{name='Sarthak', nickName='Nagin', marks=78}
friendsMarks{name='Shishya', nickName='Gorilla', marks=47}
friendsMarks{name='Sonika', nickName='Chipkali', marks=67}
friendsMarks{name='Yashdeep', nickName='Dopa', marks=95}


Sorting on the basis of nick-name
friendsMarks{name='Raushan', nickName='Chamgader', marks=99}
friendsMarks{name='Sonika', nickName='Chipkali', marks=67}
friendsMarks{name='Yashdeep', nickName='Dopa', marks=95}
friendsMarks{name='Rupesh', nickName='Gian', marks=92}
friendsMarks{name='Shishya', nickName='Gorilla', marks=47}
friendsMarks{name='Himanshu', nickName='Lalten', marks=57}
friendsMarks{name='Sarthak', nickName='Nagin', marks=78}