TreeSet类

来源:互联网 发布:服务器数据共享 编辑:程序博客网 时间:2024/06/06 00:18
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);// 使用反向的比较}}


原创粉丝点击