一、 SortedSet集合直接举例
package com.bjpowernode.java_learning;
import java.util.*;
/**
* java.util.Set
* java.util.SortedSet;无序不可以重复,但是存进去的元素可以按照元素大小顺序自动进行排列
* java.utile.TreeSet;
*/
import java.text.*;
public class D89_1_SortedSet {
public static void main(String[] args) throws ParseException{
//创建集合
SortedSet ss = new TreeSet();
//添加元素
ss.add(10);//自动装箱
ss.add(12);
ss.add(5);
ss.add(78);
Iterator i = ss.iterator();
while(i.hasNext()) {
Object element = i.next();
System.out.println(element);
}
//String
SortedSet sts = new TreeSet();
sts.add("Jack");
sts.add("SUN");
sts.add("COOK");
sts.add("LUCKY");
Iterator i2 = sts.iterator();
while(i2.hasNext()) {
Object element = i2.next();
System.out.println(element);
}
//日期Date
String t1 = "2008-08-08";
String t2 = "2009-08-08";
String t3 = "2008-09-08";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date dt1 = sdf.parse(t1);
Date dt2 = sdf.parse(t2);
Date dt3 = sdf.parse(t3);
SortedSet sss = new TreeSet();
sss.add(t1);
sss.add(t2);
sss.add(t3);
//遍历
Iterator its = sss.iterator();
while(its.hasNext()) {
Object element = its.next();
if(element instanceof Date) {
Date d = (Date)element;
System.out.println(sdf.format(d));
}
}
}
}
二、实现Comparable接口
1.SortedSet集合存储元素为什么可以进行自动排序
因为被存储的元素实现了Comparable接口,SUN编写TreeSet集合在添加元素的时候,会调用compareTo方法完成比较。
package com.bjpowernode.java_learning;
import java.util.*;
import java.lang.*;
public class D89_2_ImplementComparable {
public static void main(String[] args) {
SortedSet s = new TreeSet();
User89 u1 = new User89(3);
User89 u2 = new User89(45);
User89 u3 = new User89(12);
User89 u4 = new User89(25);
s.add(u1);
s.add(u2);
s.add(u3);
s.add(u4);
Iterator i = s.iterator();
while(i.hasNext()) {
Object o = i.next();
System.out.println(o.toString());
}
}
}
class User89 implements Comparable{
int age;
User89(int age){
this.age = age;
}
public String toString() {
return age+"";
}
//实现java.lang.Comparable;接口中的compareTo方法
//该方法程序员负责,SUN提供的程序已经调用了该方法
//需求:按照User89的年龄进行排序
public int compareTo(Object o) {
//编写一个规则
int age1 = this.age;
int age2 = ((User89)o).age;
return age2-age1;
}
}
我们改一下最后一行代码:return age1-age2;
然后编译运行
总结:我们实现的compareTo方法的时候,它的底层是一个二叉树
当返回结果大于0,那么比较的元素就会放在右子树(相当于比较出来了结果:大于);同理,当返回结果小于0,那么比较的元素就会放在左子树;
如果返回零的话,说明这两个对象是完全相同的,因此只会存储一个对象。(可以看一看Comparable源码,了解一下)。
三、源码:
D89_1_SortedSet.java
D89_2_ImplementComparable.java
https://github.com/ruigege66/Java/blob/master/D88_1_HashSetExample.java
https://github.com/ruigege66/Java/blob/master/D89_2_ImplementComparable.java
2.CSDN:https://blog.csdn.net/weixin_44630050
3.博客园:https://www.cnblogs.com/ruigege0000/
4.欢迎关注微信公众号:傅里叶变换,个人公众号,仅用于学习交流,后台回复”礼包“,获取大数据学习资料