java 17 -7 TreeSet元素排序规则的案例

  TreeSet:能够对元素按照某种规则进行排序。
  排序有两种方式
    A:自然排序
    B:比较器排序

  TreeSet集合的特点:排序和唯一

  通过观察TreeSet的add()方法,我们知道最终要看TreeMap的put()方法。

 1 package zl_TreeSet;
 2
 3 import java.util.TreeSet;
 4 public class TreeSetDemo {
 5
 6 public static void main(String[] args) {
 7 //创建TreeSet集合
 8 TreeSet<String> tree = new TreeSet<String>();
 9
10 //添加元素 自然排序
11 tree.add("bac");
12 tree.add("cba");
13 tree.add("a");
14 tree.add("u");
15 tree.add("bca");
16 tree.add("b");
17 tree.add("p");
18 tree.add("");
19 tree.add("F");
20
21 //遍历
22 for(String s : tree){
23 System.out.println(s);
24 // F,a,b,bac,bca,cba,p,u 字符串的话,自然排序是按照ASCII表的顺序,第一位相同,看第二位
25 }
26 System.out.println("---------");
27
28 TreeSet<Integer> tree1 = new TreeSet<Integer>();
29
30 tree1.add(14);
31 tree1.add(34);
32 tree1.add(41);
33 tree1.add(16);
34 tree1.add(23);
35 tree1.add(45);
36 tree1.add(41);
37 tree1.add(23);
38
39 for(Integer i : tree1){
40 System.out.println(i);
41 //int类型直接按照数字顺序排序
42 }
43
44 }
45
46 }

  用StreeSet集合存储自定义对象并遍历。

  如果一个类的元素要想能够进行自然排序,就必须实现自然排序接口

  创建TreeSet集合,添加动物对象,按照以下规则进行排序:
    品种名字长度短的在前面

  因为只有一个主要的条件,而如果就根据这个写自然排序的话,那么长度一样的对象,只会添加进去一个
  所以,要增加次要条件:
    a:长度一样的,判断动物的颜色是否一样
    b:前两者一样,再判断年龄是否一样
  以上都是自然排序

首先看对象类:

 1 package zl_TreeSet;
 2
 3 public class Animal implements Comparable<Animal>{
 4
 5     private String name;
 6     private String color;
 7     private int age;
 8     public Animal() {
 9         super();
10         // TODO Auto-generated constructor stub
11     }
12     public Animal(String name, String color, int age) {
13         super();
14         this.name = name;
15         this.color = color;
16         this.age = age;
17     }
18     public String getName() {
19         return name;
20     }
21     public void setName(String name) {
22         this.name = name;
23     }
24     public String getColor() {
25         return color;
26     }
27     public void setColor(String color) {
28         this.color = color;
29     }
30     public int getAge() {
31         return age;
32     }
33     public void setAge(int age) {
34         this.age = age;
35     }
36     /*
37           A:品种名字长度短的在前面
38
39          因为只有一个主要的条件,而如果就根据这个写自然排序的话,那么长度一样的对象,只会添加进去一个
40          所以,要增加次要条件:
41          a:长度一样的,判断动物的颜色是否一样
42          b:前两者一样,再判断年龄是否一样
43      */
44     public int compareTo(Animal a) {
45
46         //品种名字长度短的在前面
47         int num = this.name.length() - a.name.length();
48
49         //长度相同了,要看名字的内容是否相同
50         int num2 = num == 0 ? this.name.compareTo(a.name):num;
51
52         //长度和内容都相等了,并不代表颜色相同
53         int num3 = num2 == 0 ? this.color.compareTo(a.color) : num2;
54
55         //上面都相同了,不代表年龄相同
56         int num4 = num3 == 0? this.age - a.age : num3;
57
58         //得到最终的排序结论
59         return num4 ;
60
61     }
62
63
64 }

测试类:

 1 package zl_TreeSet;
 2
 3 public class Animal implements Comparable<Animal>{
 4
 5     private String name;
 6     private String color;
 7     private int age;
 8     public Animal() {
 9         super();
10         // TODO Auto-generated constructor stub
11     }
12     public Animal(String name, String color, int age) {
13         super();
14         this.name = name;
15         this.color = color;
16         this.age = age;
17     }
18     public String getName() {
19         return name;
20     }
21     public void setName(String name) {
22         this.name = name;
23     }
24     public String getColor() {
25         return color;
26     }
27     public void setColor(String color) {
28         this.color = color;
29     }
30     public int getAge() {
31         return age;
32     }
33     public void setAge(int age) {
34         this.age = age;
35     }
36     /*
37           A:品种名字长度短的在前面
38
39          因为只有一个主要的条件,而如果就根据这个写自然排序的话,那么长度一样的对象,只会添加进去一个
40          所以,要增加次要条件:
41          a:长度一样的,判断动物的颜色是否一样
42          b:前两者一样,再判断年龄是否一样
43      */
44     public int compareTo(Animal a) {
45
46         //品种名字长度短的在前面
47         int num = this.name.length() - a.name.length();
48
49         //长度相同了,要看名字的内容是否相同
50         int num2 = num == 0 ? this.name.compareTo(a.name):num;
51
52         //长度和内容都相等了,并不代表颜色相同
53         int num3 = num2 == 0 ? this.color.compareTo(a.color) : num2;
54
55         //上面都相同了,不代表年龄相同
56         int num4 = num3 == 0? this.age - a.age : num3;
57
58         //得到最终的排序结论
59         return num4 ;
60
61     }
62
63
64
65 }
时间: 2025-01-15 22:24:22

java 17 -7 TreeSet元素排序规则的案例的相关文章

java 17 - 8 TressSet比较器排序元素

1 package zl_TreeSet; 2 3 import java.util.Comparator; 4 import java.util.TreeSet; 5 6 /* 7 用StreeSet集合存储自定义对象并遍历.这次用比较器排序 8 public TreeSet(Comparator comparator) 比较器排序 9 这种方法有两种做法: 10 1:创建一个把Comparator为接口的类, 11 2:如果一个方法的参数是接口,那么真正要的是接口的实现类的对象 12 而匿名

java 17 - 6 TreeSet集合及其add()方法的源码解析

TreeSet:能够对元素按照某种规则进行排序. 排序有两种方式 A:自然排序 B:比较器排序 TreeSet集合的特点:排序和唯一 1 public class TreeSetDemo { 2 public static void main(String[] args) { 3 // 创建集合对象 4 // 自然顺序进行排序 5 TreeSet<Integer> ts = new TreeSet<Integer>(); 6 7 // 创建元素并添加 8 // 20,18,23,2

HTML连载45-浮动元素脱标、排序规则、贴靠现象

一.浮动元素脱标 1.什么是浮动元素脱标 脱标:脱离标准流. 当某一个元素浮动之后,那么这个元素看上去就像被从标准流中删除了一样 2.浮动元素脱标之后有什么影响 如果前面一个元素浮动了,而后面的一个元素没有浮动,那么这个时候前面的一个元素就会盖住后面的一个元素.前后如果反了没事 举例: <style> .box1{ float:left; width:50px; height: 50px; background-color: red; } .box2{ /*float:left;*/ widt

TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素?

TreeSet要求存放的对象所属的类必须实现Comparable接口,该接口提供了比较元素的compareTo()方法,当插入元素时会回调该方法比较元素的大小.TreeMap要求存放的键值对映射的键必须实现Comparable接口从而根据键对元素进行排序.Collections工具类的sort方法有两种重载的形式,第一种要求传入的待排序容器中存放的对象比较实现Comparable接口以实现元素的比较:第二种不强制性的要求容器中的元素必须可比较,但是要求传入第二个参数,参数是Comparator接

Java 集合系列17之 TreeSet详细介绍(源码解析)和使用示例

概要 这一章,我们对TreeSet进行学习.我们先对TreeSet有个整体认识,然后再学习它的源码,最后再通过实例来学会使用TreeSet.内容包括:第1部分 TreeSet介绍第2部分 TreeSet数据结构第3部分 TreeSet源码解析(基于JDK1.6.0_45)第4部分 TreeSet遍历方式第5部分 TreeSet示例 转载请注明出处:http://www.cnblogs.com/skywang12345/admin/EditPosts.aspx?postid=3311268 第1部

java 数组比较,元素的比较,Comparable,Comparator比较的应用实现,排序,查找示例

java 数组比较,元素的比较,自定义Comparator的实现,排序,查找示例 package org.rui.array.compar; import java.util.Arrays; import java.util.Random; import org.rui.generics.anonymity.Generator; /** * 程序设计的基本目标是"将保持不变的事物与会发生改变的事物相分离" * 而这是,不变的是通用的排序算法,变化的是各种对象相互比较的方式, * 因此,

java按照集合中元素的属性进行排序示例代码

public class Student { private String name; private int age; private int id; public Student() {  super(); } public Student(String name, int age, int id) {  super();  this.name = name;  this.age = age;  this.id = id; } public String getName() {  retur

Java (引用数据类型)排序

"排序"的实体类都实现了java.lang.Comparable接口. Comparable接口中只有一个方法: public int compareTo(Object obj); 该方法: 返回0,表示this ==obj 返回正数,表示this>obj 返回负数,表示this<obj 实现了Comparable接口的类通过实现compareTo方法从而确定该类对象的排序方式. 一.引用数据类型比较(内置数据) package innerType; /** * 引用数据类

JAVA Collections工具类sort()排序方法

主要分析内容: 一.Collections工具类两种sort()方法 二.示例 一.Collections工具类两种sort()方法 格式一: public static <T extends Comparable<? super T>> void sort(List<T> list) 说明:该方法中的泛型<T>都是Comparable接口的子类,即只有是Comparable接口子类类型的数据,才能进行比较排序.如果其他类型的数据要进行比较排序,必须继承Co