如下:

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]

Java-TreeSet的更多相关文章

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

    package TreeSetTest; import java.util.Iterator; import java.util.TreeSet; import javax.management.Ru ...

  2. java TreeSet 应用

    本文主要是介绍一下java集合中的比较重要的Set接口下的可实现类TreeSet TreeSet类,底层用二叉树的数据结构 * 集合中以有序的方式插入和抽取元素. * 添加到TreeSet中的元素必须 ...

  3. Java TreeSet的定制排序

    注:只贴出实现类 package Test3; import java.util.Comparator;import java.util.TreeSet; public class Test { pu ...

  4. Java - TreeSet源码解析

    Java提高篇(二八)------TreeSet 与HashSet是基于HashMap实现一样,TreeSet同样是基于TreeMap实现的.在<Java提高篇(二七)-----TreeMap& ...

  5. java TreeSet 实现存自定义不可重复数据

    本文主要是介绍一下java集合中的比较重要的Set接口下的可实现类TreeSet TreeSet类,底层用二叉树的数据结构 * 集合中以有序的方式插入和抽取元素. * 添加到TreeSet中的元素必须 ...

  6. 【Todo】Java TreeSet学习 & ceiling,floor

    参考 http://www.yiibai.com/java/util/java_util_treeset.html 另,用Java的TreeSet的ceiling可以模拟upper_bound(获得更 ...

  7. java TreeSet的排序之定制排序

    TreeSet的自然排序是根据元素的大小进行升序排序的,若想自己定制排序,比如降序排序,就可以使用Comparator接口了: 该接口包含int compare(Object o1,Object o2 ...

  8. java TreeSet的排序之自然排序

    TreeSet会调用元素的compareTo(Object o)方法来比较元素之间的大小关系,然后将集合里的元素按升序排列.此时需要排序元素的类必须实现Compareble接口,并覆写其int com ...

  9. Java TreeSet集合 比较器排序Comparator的使用

    比较器排序Comparator的使用 存储学生对象,并遍历,创建TreeSet集合使用带参构造方法 要求,按照学生年龄从小到大排序,如果年龄相同,则按照姓名的字母循序排序 结论 用TreeSet集合存 ...

  10. java TreeSet应用

    这篇是紧接着上一篇而写的,具体的实现TreeSet中有序的第二中方法 首先新建一个类,此类就是用于集合中存放的对象 然后定义一个类,实现Comparator中的CompareTo()方法 最后一个测试 ...

随机推荐

  1. 【Ext.Net学习笔记】05:Ext.Net GridPanel的用法(包含Filter、Sorter、Grouping、汇总(Summary)的用法)

    GridPanel是用来显示数据的表格,与ASP.NET中的GridView类似. GridPanel用法 直接看代码: <ext:GridPanel runat="server&qu ...

  2. 两种动态加载JavaScript文件的方法

    两种动态加载JavaScript文件的方法 第一种便是利用ajax方式,第二种是,动静创建一个script标签,配置其src属性,经过把script标签拔出到页面head来加载js,感乐趣的网友可以看 ...

  3. HDU 4964 Emmet --模拟

    题意:给你一个字符串,要求把它按语法转化成HTML格式. 分析:这题其实不难,就是一个递归的事情,当时忽略了括号嵌套的情况,所以一直WA,后来加上这种情况后就过了.简直醉了. 处理id和class时, ...

  4. POJ 1836 Alignment --LIS&LDS

    题意:n个士兵站成一排,求去掉最少的人数,使剩下的这排士兵的身高形成“峰形”分布,即求前面部分的LIS加上后面部分的LDS的最大值. 做法:分别求出LIS和LDS,枚举中点,求LIS+LDS的最大值. ...

  5. 第一次使用Android Studio时你应该知道的一切配置(二):新建一个属于自己的工程并安装Genymotion模拟器

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  6. AC日记——热浪 codevs 1557 (最短路模板题)

    1557 热浪  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 德克萨斯纯朴的民眾们这个夏 ...

  7. 解析 HTTP(HttpURLConnection getResponseCode)

    HTTP 请求 客户端通过发送 HTTP 请求向服务器请求对资源的访问.HTTP 请求由三部分组成,分别是:请求行.消息报头和请求征文. 3.1.请求行 请求行以一个方法符号开头,后面跟着请求 URI ...

  8. VMware 不可恢复错误(svga)”解决方法

    虚拟机VMware 文件在迁移到另一台计算机时出现"VMware Workstation 不可恢复错误(svga)"  将另一台机器的 VMware 文件拷贝至本机,打开虚拟机出现 ...

  9. PHP基础01:环境搭建

    1.只会前端的只是有时候让我感到很苦恼,所以决定从今天开始学习后端,看了一些关于后端语言的比较帖子,决定选择php作为我的第一门后端语言.这个是我自己的学习笔记.方便自己复习,不写下来会太无聊了. 第 ...

  10. C中的预编译宏定义

     可以用宏判断是否为ARC环境 #if _has_feature(objc_arc) #else //MRC #endif C中的预编译宏定义 -- 作者: infobillows 来源:网络 在将一 ...