當把一個對象加入TreeSet集合中時,TreeSet調用該對象的compareTo(Object obj)方法與容器中的其他對象比較大小,傳回-1表示該元素在前,1表示該元素在後。
方法一:讓類實作Comparable接口,并覆寫compareTo()方法,将自定義的類加入TreeSet即可
1 import java.util.Scanner;
2 import java.util.TreeSet;
3 //TreeSet應用
4 class Main {
5 public static void main(String[] args) {
6 Scanner s = new Scanner(System.in);
7 TreeSet<StringDemo> set = new TreeSet<>();
8 while(s.hasNextLine()) {
9 int n = Integer.parseInt(s.nextLine());
10 for (int i = 0; i < n; i++) {
11 String string = s.nextLine();
12 set.add(new StringDemo(string));
13 }
14 for(StringDemo s1: set) {
15 System.out.println(s1.getString());
16 }
17 }
18 s.close();
19 }
20 }
21 class StringDemo implements Comparable{
22 private String string;
23 StringDemo(String s) {
24 this.string = s;
25 }
26 public int compareTo(Object obj) {
27 StringDemo s = (StringDemo)obj;
28 if(this.string.compareTo(s.string) <= 0)
29 return -1;
30 return 1;
31 }
32 public String getString() {
33 return this.string;
34 }
35 }
View Code
方法二:自定義一個實作Comparator的排序器,實作compare()方法(兩個一起比較),在建立TreeSet的時候将此排序器加入即可
1 import java.util.Comparator;
2 import java.util.Scanner;
3 import java.util.TreeSet;
4 //TreeSet應用
5 class Main {
6 public static void main(String[] args) {
7 Scanner s = new Scanner(System.in);
8 TreeSet<String> set = new TreeSet<>(new StrComparator());
9 while(s.hasNextLine()) {
10 int n = Integer.parseInt(s.nextLine());
11 for (int i = 0; i < n; i++) {
12 String string = s.nextLine();
13 set.add(string);
14 }
15 for(String s1: set) {
16 System.out.println(s1);
17 }
18 set.clear();
19 }
20 s.close();
21 }
22 }
23 class StrComparator implements Comparator{
24 public int compare(Object obj1, Object obj2) {
25 String s1 = (String) obj1;
26 String s2 = (String) obj2;
27 if(s1.compareTo(s2) <= 0)
28 return -1;
29 return 1;
30 }
31 }
View Code
compare()方法,第一個參數為後加入的,第二個參數為已存在的(不按順序,使用的資料結構應該為樹),傳回1表示參數一在後面,-1在前面,傳回0參數一不加入Set
轉載于:https://www.cnblogs.com/cdx19971126/p/5945404.html