java treeset<>_Java-TreeSet

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

/*** TreeSet 是用来进行集合排序的,请注意他和LinkedHashSet的区别。

TreeSet是按照一定的规则,将加入到集合里面的数据进行排序,

而LinkedHashSet是严格按照你放入集合的顺序进行使用

*@authorjjj*/

importjava.util.Arrays;importjava.util.Comparator;importjava.util.Set;importjava.util.TreeSet;public classTreeSet类 {public static voidmain(String[] args) {//测试自然排序

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

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

testMix();

}public static voidtestNature() {//测试一下数字

TreeSet set = new TreeSet();//反向存入整数数据

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 set2 = new TreeSet();//同样反向放入

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 voidtestComparator() {//同样测试数字,我们要反向排序

TreeSet set = new TreeSet(newMyIntegerComparator());//反向存入整数数据

for (int i = 10; i >= 1; i--) {

set.add(i);

}//输出看看//可以看到数据为我们期望的反向排序了

showSet(set); //[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]//我们指定更奇怪的排序,奇数在前面,偶数在后面//我们使用匿名内部类

TreeSet set2 = new TreeSet(new Comparator() {public intcompare(Integer o1, Integer o2) {if (o1 % 2 != 0) {if (o2 % 2 != 0) {returno2.compareTo(o1);

}return -1;

}if (o2 % 2 != 0) {return 1;

}returno2.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 voidtestMix() {//我们测试混合类型的对象,比如字符串和整数//如果我们不指定自己的比较器,而使用默认的自然比较器//将发生异常

TreeSet set = new TreeSet(newComparator() {public intcompare(Object o1, Object o2) {//我们用字符串比较好了

returno1.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里面的数据。

*

*@paramset*/

private static voidshowSet(Set set) {

System.out.println(Arrays.toString(set.toArray()));

}

}//注意,我指定了强制类型的比较器

class MyIntegerComparator implements Comparator{public intcompare(Integer o1, Integer o2) {return o2.compareTo(o1);//使用反向的比较

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值