• 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]
  • 相关阅读:
    vbs小脚本01将文件内txt转录到excel
    MybatisPlus乐观锁Version
    PHP使用pdfparser实现对PDF转换成本文
    php获取图片的主要颜色值RGB
    nginx http跳转到https
    java 获取中文第一个拼音方法
    mysql like查询时区分字母大小写
    mysql 查询用逗号隔开字符串的关键字
    Fiddler 手机抓包
    携程爬虫
  • 原文地址:https://www.cnblogs.com/hwaggLee/p/4510565.html
Copyright © 2020-2023  润新知