TreeSet(不可重复,自动排序)实现自定义排序

方法一:让类实现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 }

方法二:自定义一个实现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 }

时间: 2024-11-06 01:44:29

TreeSet(不可重复,自动排序)实现自定义排序的相关文章

map的默认排序和自定义排序

STL的容器map为我们处理有序key-value形式数据提供了非常大的便利,由于内部红黑树结构的存储,查找的时间复杂度为O(log2N). 一般而言,使用map的时候直接采取map<typename A, typename B>的形式即可,map的内部实现默认使用A类型变量的升序来排序map的值. 但是有时我们需要对map的值做特殊的排序(不经其他容器的辅助),这就需要在定义map变量时做些特殊的处理. STL中map的定义是: 1 template<class _Kty, 2 cla

C++中sort排序之自定义排序cmp(入门)

咳咳,第一次写这种博客,介绍一下sort的自定义排序cmp函数: sort和cmp的实现需要的头文件有: #include<algorithm> using namespace std; sor()是C++标准库中的排序函数,使用很方便,传进去数组的起始和结束地址就行,注意是左闭右开,默认的排序是<,从小到大,不过可以自己写一个cmpare()来自定义,下面缩写cmp()函数.cmp()函数的返回值要是bool,核心之处也是比较,因为sort默认是从小到大,所以在cmp如果还是要从小到大

[Excel VBA]自定义排序的三种方法

诸君好,前前期我们聊了VBA编程和数据的常规排序……VBA常用小代码105:Rang对象的排序操作……今天我们再聊下自定义排序……何谓自定义排序,就是按指定的顺序对数据源进行排序呗…… 今一共分享了三种方法.第1种方法是系统自带的OrderCustom,优点是代码简洁,缺点是自定义序列有字符长度限制(255个).第2种方法是字典+数组设置序列号,再使用了辅助列进行排序.优点是不会破坏单元格的形式和结构,比如单元格中存在的公式.背景等.第3种方法是只使用字典+数组,借助简单桶排序的技巧,直接对数据

java 集合框架(TreeSet操作,自动对数据进行排序,重写CompareTo方法)

/*TreeSet * treeSet存入数据后自动调用元素的compareTo(Object obj) 方法,自动对数据进行排序 * 所以输出的数据是经过排序的数据 * 注:compareTo方法返回值有:负数,零,正数.分别表示小于,等于,大于 * 对于存入自定义的对象元素,要重写元素的compareTo(Object obj)方法 * 元素定义时,需要实现Comparable接口 * */ 1 import java.util.Iterator; 2 import java.util.Tr

Comparator与Comparable,自定义排序和类比较器,TreeSet对象排序

/** * 学生类 * @author Administrator * */ public class Student { private String sno ; private String sname ; private Integer score ; public Student(String sno, String sname, Integer score) { super(); this.sno = sno; this.sname = sname; this.score = scor

SortedSet自定义排序

我们知道,集合Set可以存放一系列的对象,比如int,class,而且是无序的,是不可重复的.今天我们来探讨的是:Set可不可以排序,怎样自定义排序规则 首先盗一张图来说明Set的继承关系: 我们今天主要讨论SortedSet的用法. (注意:上图里都是借口,需要用它们的实现类) 下面我们来实现SortedSet的排序: public class test { public static void main(String[] args) { TreeSet<String> set=new Tr

TreeSet之定制排序和自然排序

TreeSet的几大特点: 1.TreeSet中存储的类型必须是一致的,不能一下存int,一下又存string 2.TreeSet在遍历集合元素时,是有顺序的[从小到大](我的理解,如果存的字母,按字典序排列) 3.排序:当向TreeSet中添加自定义对象时,有2种排序方法,1:自然排序 2.定制排序 自然排序:要求自定义类实现java.lang.Comparable接口并重写compareTo(Object obj)方法.在此方法中,指明按照自定义类的哪个属性进行排序 一.自然排序示例: 1.

Python应用——自定义排序全套方案

本文始发于个人公众号:TechFlow,原创不易,求个关注 今天的这篇文章和大家聊聊Python当中的排序,和很多高级语言一样,Python封装了成熟的排序函数.我们只需要调用内部的sort函数,就可以完成排序.但是实际场景当中,排序的应用往往比较复杂,比如对象类型,当中有多个字段,我们希望按照指定字段排序,或者是希望按照多关键字排序,这个时候就不能简单的函数调用来解决了. 字典排序 我们先来看下最常见的字典排序的场景,假设我们有一个字典的数组,字典内有多个字段.我们希望能够根据字典当中的某一个

重复造轮子系列--桶排序

理解了基数排序,也就理解了桶排序. 桶排序就是基数排序的一种优化,从MSD开始,即取最高位来排一次序,如果最高位没有重复(意味着没有冲突需要处理),是算法的最佳状态,O(n). 如果有冲突,就将冲突的元素存放到对应的桶里(代码就是一个链表或者数组或者stl容器),然后对每个桶进行一次插入排序,平均情况的话冲突很小的,桶里的元素的数量就不多,速度很快, 如果冲突集中在几个桶甚至一个桶里,那么就出现了算法的最差情形,也就是O(n^2)的复杂度. 下面是例子代码实现: 1 template<typen

一步一步跟我学习lucene(13)---lucene搜索之自定义排序的实现原理和编写自己的自定义排序工具

自定义排序说明 我们在做lucene搜索的时候,可能会需要排序功能,虽然lucene内置了多种类型的排序,但是如果在需要先进行某些值的运算然后在排序的时候就有点显得无能为力了: 要做自定义查询,我们就要研究lucene已经实现的排序功能,lucene的所有排序都是要继承FieldComparator,然后重写内部实现,这里以IntComparator为例子来查看其实现: IntComparator相关实现 其类的声明为 public static class IntComparator exte