TreeSet和Comparator 对TreeSet排序

使用TreeSet和Comparator,编写TreeSetTestInner类,要求对TreeSet中的元素"HashSet"、"ArrayList"、"TreeMap"、"HashMap"、"TreeSet"、"LinkedList"进行升序和倒序排列,并使用匿名内部类和静态内部类分别实现。

方法一:

静态内部类

import java.util.*;

public class TreeSetTestInner{

       public static void main(String[] args) {

              TreeSet c = new TreeSet(new MyComparator());  

              c.add("HashSet");

              c.add("ArrayList");

              c.add("TreeMap");

              c.add("HashMap");

              c.add("TreeSet");

              c.add("LinkedList");

              Iterator it = c.iterator();

              while(it.hasNext())

                     System.out.println(it.next());

       }

       static class MyComparator implements Comparator{

              public int compare(Object o1, Object o2){

                     String s1 = (String)o1;

                     String s2 = (String)o2;

                     //升序

                     //return s1.compareTo(s2);

                     //降序

                     return -s1.compareTo(s2);

              }

       }

}

匿名内部类

import java.util.*;

public class TreeSetTestInner2{

       public static void main(String[] args) {

              TreeSet c = new TreeSet(new Comparator(){

                     public int compare(Object o1, Object o2){

                            String s1 = (String)o1;

                            String s2 = (String)o2;

                            //升序

                            //return s1.compareTo(s2);

                            //降序

                            return -s1.compareTo(s2);

                     }

              });  

              c.add("HashSet");

              c.add("ArrayList");

              c.add("TreeMap");

              c.add("HashMap");

              c.add("TreeSet");

              c.add("LinkedList");

              Iterator it = c.iterator();

              while(it.hasNext())

                     System.out.println(it.next());

       }    

}

方法二:

匿名内部类

import java.util.*;

public class TreeSetTest3 {

    public static void main(String[] args){
        String[] s = {"HashSet","ArrayList","TreeMap","HashMap","TreeSet","LinkedList"};

        TreeSet sts = new TreeSet();
        TreeSet jts = new TreeSet(new Comparator(){
            public int compare(Object a, Object b){
                String s1 = (String)a;
                String s2 = (String)b;
                if(s1.compareTo(s2) > 0){
                    return -1;
                }
                else if(s1.compareTo(s2) == 0){
                    return 0;
                }
                else{
                    return 1;
                }
            }
        });

        for(int i = 0; i < 6; i++){
            jts.add(s[i]);
        }
        for(int i = 0; i < 6; i++){
            sts.add(s[i]);
        }
        System.out.println("升序"+sts);
        System.out.println("降序"+jts);

    }

}

静态内部类:

import java.util.*;

public class TreeSetTest4 {
    static class PaiXu{
        TreeSet sts;
        TreeSet jts;
        public TreeSet daoxu(String[] s){
            jts = new TreeSet(new Comparator(){
            public int compare(Object a, Object b){
                String s1 = (String)a;
                String s2 = (String)b;
                if(s1.compareTo(s2) > 0){
                    return -1;
                }
                else if(s1.compareTo(s2) == 0){
                    return 0;
                }
                else{
                    return 1;
                }
            }
            });

            for(int i = 0; i < 6; i++){
                jts.add(s[i]);
            }
            return jts;
        }

        public TreeSet shunxu(String[] s){
            sts = new TreeSet();
            for(int i = 0; i < 6; i++){
                sts.add(s[i]);
            }
            return sts;
        }
    }
    public static void main(String[] args){
        String[] s = {"HashSet","ArrayList","TreeMap","HashMap","TreeSet","LinkedList"};
        PaiXu px = new PaiXu();
        px.shunxu(s);
        px.daoxu(s);
        System.out.println("升序"+px.sts);
        System.out.println("降序"+px.jts);
    }

}
时间: 2024-10-21 14:35:34

TreeSet和Comparator 对TreeSet排序的相关文章

使用TreeSet和Comparator,写TreeSetTest2 要求:对TreeSet中的元素1,2,3,4,5,6,7,8,9,10进行排列,排序逻辑为奇数在前偶数在后,奇数按照升序排列,偶数按照降序排列

/* * 使用TreeSet和Comparator,写TreeSetTest2 *要求:对TreeSet中的元素1,2,3,4,5,6,7,8,9,10进行排列, *排序逻辑为奇数在前偶数在后,奇数按照升序排列,偶数按照降序排列 */ import java.util.Comparator; import java.util.TreeSet; public class TreeTest2 { public static void main(String[] args) { // TODO Aut

用TreeSet和Comparator给list集合元素去重

今天在做导入功能时,看到一个感觉很好的去重算法,特分享给大家看看: 其原理利用了以下几点: 1.TreeSet里面不会有重复的元素,所以当把一个List放进TreeSet里面后,会自动去重 2.TreeSet去重也是有条件的,它依靠放入其中的元素的排序规则,所以放入其中的元素要有一个自定义的排序规则(此处表述不是很清楚,欢迎指正) 下面开始看好戏: 原本List<Person> persons 里面有3个元素: List<Person> persons = new ArrayLis

Java TreeSet with Comparator sorting

TreeSet guarantees no duplicate data, also guarantees long(n) time complexity for add(), remove(), contains(). import java.util.Comparator; import java.util.TreeSet; public class MySetWithCompr { public static void main(String b[]){ TreeSet<MyComp>

TreeSet容器实现元素自排序

谈到TreeSet,首先要对比一下HashSet,二者都是Set集合的子类.Set集合有存储的数值不能重复的特点,其中,HashSet,取的数据不是按照怎样存就是怎样取,他的底层是一个HashMap做的数据存储,是一个Hash表,他实现去重的方式是:该HashSet容器中存储的无论是Java提供的系统类,比如,String,还是自定义类Person,Student,重写hashCode和equals方法后,可以实现去重功能.看String源码,可以知道String重写父类Object的hashC

TreeSet,Comparator

ThreeSet能够对集合中的对象排序,当TreeSet想集合中加入一个对象时,会把它插入到有序的对象序列中. ThreeSet自带了一个排序方法,这个方法规定了一般数据的排序规则,如果用户想要规定自己的排序方法,那么久要重写Comparator方法. 下面是一个ThreeSet自带方法排序的例子: 输出的结果为:[A,B,C,D,E,F] 可以看出ThreeSet内部对字符的排序. 那么现在我们定义一个Preson类,按照person类的score属性的升序排序,显然,ThreeSet本身并不

利用TreeSet给纯数字字符串排序

import java.util.Iterator;import java.util.TreeSet; /* * 给字符串中的数字排序 * String str = "10,2,11,1,34,101,32"; */public class Demo7 { public static void main(String[] args){ String str = "10 2 11 1 34 10132"; TreeSet ts = new TreeSet(); Str

Java中Comparator进行对象排序

Java在8后引入了lambda表达式和流,使得排序方法有了变化 class User { int id; String name; public User(int id, String name) { this.id = id; this.name = name; } public int getId() { return id; } public String getName() { return name; } @Override public String toString() { re

[转] Java中Comparator进行对象排序

[From] https://blog.51cto.com/thinklili/2063244 Java在8后引入了lambda表达式和流,使得排序方法有了变化 class User { int id; String name; public User(int id, String name) { this.id = id; this.name = name; } public int getId() { return id; } public String getName() { return

Comparable和Comparator比较实现排序 场景分析

源码分析 - Collections.sort() 一.Collection.sort使用 Collections.sort():是对一个集合进行正向排序的方法首先,传入Collections.sort()的集合的元素类型要继承Comparator<T>,这样才能保证可以比较并排序. 根据源码分析,实现方式主要有两种: (1)对普通类型和String等类型排序 (2)对JavaBean某个属性(比如时间,价格,年龄排序)进行排序 使用案例: List<String> listOne