Set: 是一个接口,
特点
无序: 存入的数据和取出的数据不一定相同叫做无序。
不可重复的原因: 因为Set 是无序的
TreeSet 底层是红黑树
Compare 比较器
再自定义类中覆写compareto方法
@Override
public int compareTo(Object o) {
return 1;
}
- Treeset 中放入的类必须相同
- TreeSet中方法的类,必须实现Comparablef接口,覆写其中的ComparTo方法
- ComparTo中返回值:
- 0表示前后添加的元素相同Set 不在放入。
- 1整数 表示需要相比较的前后两个对象换位置
- -1 表示不需要换位置
- 只能修改自己定义的类中CompareTol的方法,Integer,String,Date等Java自带的无法修改
软件设计的六大原则之一 开闭原则。
- 对修改关闭 不能修改Java 中的自带源码
- 对扩展开放 可以通过继承实现,来实现扩展开放
Compartor比较器 优先级比Comparable高
1.在直接用
public class Set_03 {
public static void main(String[] args) {
Set a = new TreeSet(new Comparator() {
@Override
public int compare(Object o1, Object o2) {
Use_01 o11 = (Use_01) o1;
Use_01 o12 = (Use_01) o2;
return ((Use_01) o2).getId() - o11.getId();//倒叙
}
});
a.add(new Use_01("张三", 1));
a.add(new Use_01("张三", 3));
a.add(new Use_01("张三", 2));
a.add(new Use_01("张三", 4));
System.out.println(a);
}
2.Collections.sort 排序 只能在Llis中使用
public class Set_03 {
public static void main(String[] args) {
只能用以List 中
List a = new ArrayList();
a.add(new Use_01("张三", 1));
a.add(new Use_01("张三", 3));
a.add(new Use_01("张三", 2));
a.add(new Use_01("张三", 4));
Collections.sort(a, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
Use_01 o11 = (Use_01) o1;
Use_01 o12 = (Use_01) o2;
return ((Use_01) o2).getId() - o11.getId();//倒叙
return ( o11.getId()-(Use_01) o2).getId() ;//正序
}
});
System.out.println(a);
}
}
泛型: <E>
优点 : 指定某一个类型,传入其他类型会在编译的时候报错。
缺点:不灵活,只能穿某一个。
< 规定的类> 添加规定类中的类
集中泛型的代表
T(Type)具体的)ava类
E(Element)在集合中使用,因为集合中存放的是元素
KV(key value)分别代表java键值中的Key Value
N(Number)数值类型
?表示不确定的Java类型