快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

皇马国际老品牌网站:JAVA提高教程(4)认识Set集合之TreeSet



TreeSet 是用来进行聚拢排序的,请留意他和LinkedHashSet的差别。

TreeSet是按照必然的规则,将加入到聚拢里面的数据进行排序,而LinkedHashSet是严格按照你放入聚拢的顺序进行应用。

先看源代码

package collection.lession4;

import java.util.Arrays;

import java.util.Comparator;

import java.util.Set;

import java.util.TreeSet;

/**

* 老紫竹JAVA前进教程(4)-熟识Set聚拢之TreeSet。

* 此实现的特征是里面的数据会自然排序或者用指定的排序类排序。

*

* @author 老紫竹

*

*/

public class Lession4 {

public static void main(String[] args) {

// 测试自然排序

testNature();

// 测试指定排序要领

testComparator();

// 测试特殊的混杂工具排序

testMix();

}

public static void testNature() {

// 测试一下数字

TreeSet set = new TreeSet();

// 反向存入整数数据

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

set.add(i);

}

// 输出看看

// 可以看到数据为自然的数字排序

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 void testComparator() {

// 同样测试数字,我们要反向排序

TreeSet set = new TreeSet(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 set2 = new TreeSet(new Comparator() {

@Override

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() {

@Override

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 {

@Override

public int compare(Integer o1, Integer o2) {

return o2.compareTo(o1);// 应用反向的对照

}

}

测试:

1 默认排序要求里面的数据类型必须能相互自由转换(实际上就应该是一个类型才行),我们测试如下代码看看运行差错

// 支持混杂类型

TreeSet set = new TreeSet();

// 放入混杂数据

for (int i = 10; i >= 1; i--皇马国际老品牌网站) {

set.add(i); // 存入整数

set.add(i + ""); // 存入字符串

}

2 测试让所有的排序都反向,比如曩昔是从小到大年夜,变成从大年夜到小。 奇数靠前变成偶数考前。

总结:

当你必要让聚拢进行有必然排序规则的应用时,记得用这个。 不过我小我更爱好用List,需要时用sort措施进行排序。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: