如下:

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. 利用Google Speech API实现Speech To Text

    很久很久以前, 网上流传着一个免费的,识别率暴高的,稳定的 Speech To Text API, 那就是Google Speech API. 但是最近再使用的时候,总是返回500 Error. 后来 ...

  2. PHP中的include和require

    1.include语句 使用include语句可以告诉PHP提取特定的文件,并载入它的全部内容 <?php inlude "fileinfo.php"; //此处添加其他代码 ...

  3. 你知道的display的值有多少?用了多少?

    它的语法如下: display:none | inline | block | list-item | inline-block | table | inline-table | table-capt ...

  4. HDU 2491 Priest John's Busiest Day

    贪心.. #include<iostream> #include<string.h> #include<math.h> #include <stdio.h&g ...

  5. Spring 一二事(2)

    静态工厂方法及实例工厂的使用: applicationContext.xml: <!-- factory-method 是指调用静态工厂方法 --> <bean id="h ...

  6. java 8-6 抽象的练习

    1. 猫狗案例 具体事物:猫,狗 共性:姓名,年龄,吃饭 分析:从具体到抽象 猫: 成员变量:姓名,年龄 构造方法:无参,带参 成员方法:吃饭(猫吃鱼) 狗: 成员变量:姓名,年龄 构造方法:无参,带 ...

  7. java 16 -3 Vector的特有功能

    /* * Vector的特有功能: * 1:添加功能 替代 * public void addElement(Object obj) -- add() * 2:获取功能 * public Object ...

  8. 怎么解决Android studio导入项目卡死

    在使用Android studio的时候常常遇到这样的问题,从github或是其他地方导入项目,Android studio呈现卡死的现象!当遇到这种情况时,可以看看是下面那种情况,在按照方法来解决! ...

  9. PHP基础13:数组排序

    <?php //1.对数组进行升序排序 - sort() $cars=array("VOLVO","BMW","BYD"); $fri ...

  10. Lenovo GTX960M 配置CUDA

    文章是出自我的原创,是写在新浪博客里面的:http://blog.sina.com.cn/s/blog_13b7eb5b20102wvxw.html 首先,软件的版本你选择很重要,我们配置了两天才成功 ...