Java-TreeSet

如下:

package 集合类.Set类;
/**
 * Set不允许重复数据
 */  

/**
 * TreeSet 是用来进行集合排序的,请注意他和LinkedHashSet的区别。 
 TreeSet是按照一定的规则,将加入到集合里面的数据进行排序,
 而LinkedHashSet是严格按照你放入集合的顺序进行使用
 * @author jjj
 */
import java.util.Arrays;
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;  

public class TreeSet类 {
    public static void main(String[] args) {
        // 测试自然排序
        testNature();  

        // 测试指定排序方式
        testComparator();  

        // 测试特殊的混合对象排序
        testMix();
    }  

    public static void testNature() {
        // 测试一下数字
        TreeSet<Integer> set = new TreeSet<Integer>();
        // 反向存入整数数据
        for (int i = 10; i >= 1; i--) {
            set.add(i);
        }
        //如果add了相同的数据,是无效的,因为set集合不能重复元素
        set.add(10);
        // 输出看看
        // 可以看到数据为自然的数字排序
        showSet(set); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  

        // 测试一下字符串
        TreeSet<String> set2 = new TreeSet<String>();
        // 同样反向放入
        for (int i = 10; i >= 1; i--) {
            set2.add(i + "");
        }
        // 看输出结果
        // 10 的自然排序没有2高,因为字符‘1‘小于‘2‘
        showSet(set2); // [1, 10, 2, 3, 4, 5, 6, 7, 8, 9]  

        // TreeSet里面的数据因为要排队
        // 所以如果是混合类型数据的数据,如果不能字段转换
        // 将出现异常 java.lang.ClassCastException:
    }  

    public static void testComparator() {
        // 同样测试数字,我们要反向排序
        TreeSet<Integer> set = new TreeSet<Integer>(new MyIntegerComparator());
        // 反向存入整数数据
        for (int i = 10; i >= 1; i--) {
            set.add(i);
        }
        // 输出看看
        // 可以看到数据为我们期望的反向排序了
        showSet(set); // [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]  

        // 我们指定更奇怪的排序,奇数在前面,偶数在后面
        // 我们使用匿名内部类
        TreeSet<Integer> set2 = new TreeSet<Integer>(new Comparator<Integer>() {  

            public int compare(Integer o1, Integer o2) {
                if (o1 % 2 != 0) {
                    if (o2 % 2 != 0) {
                        return o2.compareTo(o1);
                    }
                    return -1;
                }
                if (o2 % 2 != 0) {
                    return 1;
                }
                return o2.compareTo(o1);
            }
        });
        // 反向存入整数数据
        for (int i = 10; i >= 1; i--) {
            set2.add(i);
        }
        // 输出看看
        // 可以看到数据,技术的在前面,且从大到小排序
        // 偶数在后面,也是从大到小排序
        showSet(set2); // [9, 7, 5, 3, 1, 10, 8, 6, 4, 2]  

    }  

    /**
     * 混合对象,你要为每个对象类型进行计较控制,避免出现转换异常.
     */
    public static void testMix() {
        // 我们测试混合类型的对象,比如字符串和整数
        // 如果我们不指定自己的比较器,而使用默认的自然比较器
        // 将发生异常
        TreeSet set = new TreeSet(new Comparator() {  

            public int compare(Object o1, Object o2) {
                // 我们用字符串比较好了
                return o1.toString().compareTo(o2.toString());
            }  

        });
        for (int i = 10; i >= 1; i--) {
            set.add(i); // 存入整数
            set.add(i + ""); // 存入字符串
        }
        // 输出看看
        // 里面的内容确实按照字符串进行排序了。
        // 数字被转化为字符串再参与比较。
        showSet(set); // [1, 10, 2, 3, 4, 5, 6, 7, 8, 9]
    }  

    /**
     * 显示Set里面的数据。
     *
     * @param set
     */
    private static void showSet(Set set) {
        System.out.println(Arrays.toString(set.toArray()));
    }
}  

// 注意,我指定了强制类型的比较器
class MyIntegerComparator implements Comparator<Integer> {  

    public int compare(Integer o1, Integer o2) {
        return o2.compareTo(o1);// 使用反向的比较
    }
}  

输出结果如下:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 10, 2, 3, 4, 5, 6, 7, 8, 9]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
[9, 7, 5, 3, 1, 10, 8, 6, 4, 2]
[1, 10, 2, 3, 4, 5, 6, 7, 8, 9]
时间: 2024-12-26 22:01:38

Java-TreeSet的相关文章

Java TreeSet的定制排序

注:只贴出实现类 package Test3; import java.util.Comparator;import java.util.TreeSet; public class Test { public static void main(String[] args) { Comparator com=new Comparator() {①创建一个Comparator接口的匿名内部类 @Override public int compare(Object o1, Object o2) {②重

Java - TreeSet源码解析

Java提高篇(二八)------TreeSet 与HashSet是基于HashMap实现一样,TreeSet同样是基于TreeMap实现的.在<Java提高篇(二七)-----TreeMap>中LZ详细讲解了TreeMap实现机制,如果客官详情看了这篇博文或者多TreeMap有比较详细的了解,那么TreeSet的实现对您是喝口水那么简单. 一.TreeSet定义 我们知道TreeMap是一个有序的二叉树,那么同理TreeSet同样也是一个有序的,它的作用是提供有序的Set集合.通过源码我们知

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>

java TreeSet 应用

本文主要是介绍一下java集合中的比较重要的Set接口下的可实现类TreeSet TreeSet类,底层用二叉树的数据结构 * 集合中以有序的方式插入和抽取元素. * 添加到TreeSet中的元素必须是可以排序的 * 保证数据的唯一性: * 第一种:让添加的类自身具有可比较性, * 实现Comparable接口中的CompareTo()方法 首先建立一个添加的类型,如下定义,让元素自身具备可比较性 * 添加类中实现Comparable方法中CompareTo()方法 * 按对象的年龄进行排序存储

黑马程序员——java——TreeSet集合中储存学生对象,按照其年龄进行排序

TreeSet集合中储存学生对象,按照其年龄进行排序 import java.util.Comparator; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.TreeSet; public class SortListDemos { public static void main(String[] args) { // //linkhash

Java TreeSet集合排序 &amp;&amp; 定义一个类实现Comparator接口,覆盖compare方法 &amp;&amp; 按照字符串长度排序

package TreeSetTest; import java.util.Iterator; import java.util.TreeSet; import javax.management.RuntimeErrorException; /* 可以对set集合中的元素进行排序,其底层的数据结构是二叉树, 保证元素唯一性的依据是compareTo和return 0; TreeSet排序的第一种方式 让元素自身具备比较性 元素需要实现Comparable接口,覆盖compareTo方法 这种方式

java TreeSet的排序之定制排序

TreeSet的自然排序是根据元素的大小进行升序排序的,若想自己定制排序,比如降序排序,就可以使用Comparator接口了: 该接口包含int compare(Object o1,Object o2)方法,用于比较两个对象的大小,比较结果和compareTo方法一致; 要实现定制排序,需要在创建TreeSet集合对象时,提供一个一个Comparator对象,该对象里负责集合元素的排序逻辑; TreeSet(Comparator comparator) Eg: package july7; //

java TreeSet的排序之自然排序

TreeSet会调用元素的compareTo(Object o)方法来比较元素之间的大小关系,然后将集合里的元素按升序排列.此时需要排序元素的类必须实现Compareble接口,并覆写其int compareTo(Object o)方法; 该方法用于比较对象,若:obj1,compareTo(obj2),返回0,表示两个对象相等,若返回一个正整数,表示obj1大于obj2,若返回一个负整数,表示obj1小于obj2; 对于TreeSet集合而言,判断两个对象相等的标准是: compareTo()

Java TreeSet类

TreeSet中提供了使用存储树Set接口的一个实现.对象存储在排序,按升序排列. 访问和检索的时间是相当快,存储,必须迅速找到大量的排序信息时,这使得TreeSet的一个很好的选择. TreeSet类支持四种构造函数.第一种形式构造一个空树组会以递增顺序根据其元素的自然顺序进行排序: TreeSet( ) 第二种形式生成包含c的元素树集. TreeSet(Collection c) 第三种形式构造一个空树组将根据排版指定的比较器进行排序. TreeSet(Comparator comp) 第四

TreeSet的学习

TreeSet is another popular implementation of Set interface along with HashSet and LinkedHashSet. All these implementations of Set interface are required in different scenarios. If you don’t want any order of elements, then you can use HashSet. If you