黑马程序员——java学习9(毕15-16总结)——TreeSet

1、

 1 package learn;
 2 /*
 3  * |--TreeSet
 4  *             可以对Set集合排序
 5  *             底层数据结构是二叉树
 6  *             保证数据唯一性的依据:compareTo方法return 0;原序return 1;
 7  *
 8  *         TreeSet排序的第一种方式:让元素子集具备比较性。元素需要实现compareTo接口,覆盖compareTo方法
 9  *         也称为元素的自然顺序,默认顺序
10  *
11  *        TreeSet的第二种排序方式:当元素自身不具备比较性时,或者具备的比较性不是所需要的
12  *                            这是就需要让集合自身具备比较性
13  *                            在集合初始化时就有了比较方式
14  *
15  *
16  * 需求:往TreeSet集合中存储自定义对象学生
17  * 想按照学生的年龄进行排序
18  *
19  * 排序时,主要条件一致,一定要判断次要条件!
20  * */
21 import java.util.Iterator;
22 import java.util.TreeSet;
23
24 import learn.Student;
25
26 public class TreeSetDemo {
27     public static void main(String[] args) {
28         TreeSet ts=new TreeSet();
29         ts.add(new Student("lisi02",22));
30         ts.add(new Student("lisi007",20));
31         ts.add(new Student("lisi09",19));
32         ts.add(new Student("lisi08",19));
33 //        ts.add(new Student("lisi01",40));
34
35
36         Iterator it=ts.iterator();
37         while(it.hasNext())
38         {
39             Student stu=(Student)it.next();
40             System.out.println(stu.getName()+"..."+stu.getAge());
41         }
42     }
43 }
44
45 class Student implements Comparable//该接口强制让学生具备比较性
46 {
47     private String name;
48     private int age;
49     Student(String name,int age)
50     {
51         this.name=name;
52         this.age=age;
53     }
54     public int compareTo(Object obj)
55     {
56         if(!(obj instanceof Student))
57             throw new RuntimeException("不是学生对象");
58         Student s =(Student)obj;
59         if(this.age>s.age)
60             return 1;
61         if(this.age==s.age)
62             return this.name.compareTo(s.name);
63         return -1;
64     }
65     public String getName()
66     {
67         return name;
68     }
69     public int getAge()
70     {
71         return age;
72     }
73 }

2、

 1 package learn2;
 2 /*
 3  * 当元素自身不具备比较性,或者具备的比较性不是所需要的
 4  * 这时需要让容器自身具备比较性
 5  * 定义了比较器,将比较器对象作为参数传递给TreeSet集合的构造函数
 6  * 当两种排序都存在时,以比较器为主
 7  *
 8  * 定义了一个类,实现Comparator接口,覆盖compare方法
 9  * */
10 import java.util.Comparator;
11 import java.util.Iterator;
12 import java.util.TreeSet;
13
14 class Student implements Comparable//该接口强制让学生具备比较性
15 {
16     private String name;
17     private int age;
18     Student(String name,int age)
19     {
20         this.name=name;
21         this.age=age;
22     }
23     public int compareTo(Object obj)
24     {
25         if(!(obj instanceof Student))
26             throw new RuntimeException("不是学生对象");
27         Student s =(Student)obj;
28         if(this.age>s.age)
29             return 1;
30         if(this.age==s.age)
31             return this.name.compareTo(s.name);
32         return -1;
33     }
34     public String getName()
35     {
36         return name;
37     }
38     public int getAge()
39     {
40         return age;
41     }
42 }
43 public class TreeSetDemo2 {
44     public static void main(String[] args) {
45         TreeSet ts=new TreeSet(new MyCompare());
46         ts.add(new Student("lisi02",22));
47         ts.add(new Student("lisi007",20));
48         ts.add(new Student("lisi09",19));
49         ts.add(new Student("lisi06",19));
50 //        ts.add(new Student("lisi01",40));
51
52
53         Iterator it=ts.iterator();
54         while(it.hasNext())
55         {
56             Student stu=(Student)it.next();
57             System.out.println(stu.getName()+"..."+stu.getAge());
58         }
59     }
60 }
61
62 class MyCompare implements Comparator
63 {
64     public int  compare(Object o1,Object o2)
65     {
66         Student s1=(Student)o1;
67         Student s2=(Student)o2;
68
69         int num=s1.getName().compareTo(s2.getName());
70         if(num==0)
71         {
72             return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
73             /*
74             if(s1.getAge()>s2.getAge())
75                 return 1;
76             if(s1.getAge()==s2.getAge())
77                 return 0;
78                 */
79         }
80         return num;
81
82     }
83 }

3、

 1 package Test;
 2
 3 import java.util.Comparator;
 4 import java.util.Iterator;
 5 import java.util.TreeSet;
 6
 7 /*
 8  * 练习,按照字符串长度排序
 9  * 字符串本身具备比较性,但是比较方式不是所需要的
10  * */
11 public class TreeSetTest {
12     public static void main(String[] args) {
13         TreeSet ts=new TreeSet(new StrLengthComparator());
14         ts.add("abcd");
15         ts.add("cc");
16         ts.add("cba");
17         ts.add("aaa");
18         ts.add("z");
19         ts.add("hahaha");
20
21         Iterator it=ts.iterator();
22         while(it.hasNext())
23         {
24             System.out.println(it.next());
25         }
26     }
27 }
28
29 class StrLengthComparator implements Comparator
30 {
31     public int compare(Object o1,Object o2)
32     {
33         String s1=(String)o1;
34         String s2=(String)o2;
35 //        if(s1.length()>s2.length())
36 //            return 1;
37 //        if(s1.length()==s2.length())
38 //            return 0;
39         int num=new Integer(s1.length()).compareTo(new Integer(s2.length()));
40         if(num==0)
41             return s1.compareTo(s2);
42         return num;
43     }
44 }

4、

时间: 2024-08-25 13:47:19

黑马程序员——java学习9(毕15-16总结)——TreeSet的相关文章

黑马程序员-JAVA学习日记-数组YNPB

黑马程序员学习笔记黑马程序员编程基础数组培训.培训.期待与您交流!数组:是存储同一种数据类型的的集合,也叫容器:特点:是数组中每个元素都有索引从开始:数组的定义式:数据类型数组名数据类型元素个数:数据类型数组名数据类型元素个数:如:数据类型数组名数据类型元素数据类型数组名元素如:如果元素确定就用这一种:数组中有一个属性:获取数组中的元素个数,即数组的长度:中的内存机制:栈:存储局部变量,一般定义在函数内的变量成为局部变量:特点:当内存中数据操作完成后,所占空间会自动释放栈内存堆:是通过创建的实体

黑马程序员——java学习12(毕18--总结)——IO

1.IO流 处理设备之间的数据传输 字符流为了处理文字而存在,基于字节流,其中融合了编码表 1.1.Writer--------write,flush,close java.util.FileWriter FileWriter(String fileName)根据给定的文件名构造一个FileWriter对象 java.io.OutputStreamWriter void write(String str, int off, int len)将数据写入流中 void flush()刷新流中的缓冲

黑马程序员——java学习11(毕17--总结)——

1.字符串排序 考虑一个空格和多个空格的限定 转化时记得对象间比较实用compareTo 1 package learn; 2 3 import java.util.Arrays; 4 5 /*对一个字符串进行从小到大排序 6 * 20 78 9 -7 88 36 29 7 * 思路 8 * 1.排序,多用int 9 * 2.如何获取到这个字符串中的这些需要排序的数值? 10 * 发现这个字符串中其实都是空格来对数值进行分隔的 11 * 所以就想到用字符串对象的切割方法将大串变成多个小串 12

黑马程序员——java学习16(毕25)——正则表达式

正则表达式 符合一定规则的表达式 作用:专门用于操作字符串 特点:用于一些特定的符号来表示一些代码操作,这样就简化书写 好处:可以简化对字符串的复杂操作 具体操作功能: 1.匹配: public boolean matches(String regex) 参数 regex - 用来匹配此字符串的正则表达式 2.切割   String[] split(String  regex) 根据给定正则表达式的匹配拆分此字符串. 3.替换 String  replaceAll(String  regex ,

黑马程序员——JAVA学习笔记十四(高新技术三)

10 代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供定的服务. 按照代理的创建时期,代理类可以分为两种. 静态代理:由程序员创建或特定工具自动生成源代码,再对其编译.在程序运行前,代理类的.class文件就已经存在了. 动态代

黑马程序员——JAVA学习笔记十二(高新技术一)

 1,    静态导入: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 package com.solaire.enhance; import static java.lang.Math.max;  //import   语句可以导入一个类或某个包中的所有类 //import static  静态导入 JDK5以后才有.语句导入一个类中的某个静态方法或所有静态方法 //无名包和有包名中的类在一起,没有package,则为无名包. //一个类

黑马程序员——JAVA学习笔记十三(高新技术二)

8,    注解 Annotation(注解)是JDK5.0及以后版本引入的. 注解是以 @注解名 的形式标识 注解不会影响程序语义,只作为标识 注解是新的类型(与接口很相似),它与类.接口.枚举是在同一个层次,它们都称作为java的一个类型(TYPE). 它可以声明在包.类.字段.方法.局部变量.方法参数等的前面,用来对这些元素进行说明,注释. 它的作用非常的多,例如:进行编译检查.生成说明文档.代码分析等 注释类型 是一种特殊的接口 用 @interface 声明如 [email prote

黑马程序员——JAVA学习笔记十(IO)

1,    可以从其中读入一个字节序列的对象成为输入流,可以向其中写入一个字节序列的对象就做输出流.这些字节序列的来源地可以是文件,也可以是网络连接或者内存块.抽象类InputStream和OutputStream构成了I/O层次的基础.因为字节流不便于处理以Unicode存储的信息,所以有了Writer和Reader抽象类,这些从其中继承的类都是读入和写入基于2个字节的Unicode码元,而不是单个字节.   2,    InputStream 与OutputStream: abstract

黑马程序员——java学习6(127-151总结)——多线程

---恢复内容开始--- 1.多线程 进程:是一个正在执行中的程序. 每一个进程执行都有一个执行顺序,该顺序是一个执行路径,或者叫控制单元. 线程:就是进程中的一个独立的控制单元 线程在控制着进程的执行 一个进程中至少有一个线程. Java VM 启动的时候回有一个进程java.exe 该进程中至少一个线程负责java程序的执行 而且这个线程运行的代码存在于main方法中 该线程称之为主线程. 扩展:其实更细节说明jvm,启动的还有垃圾回收机制的线程 创建线程的方式 1.1继承Thread (1