比较器、set、map、散列
1 TreeSet
set特点 : 无序 不可重复,添加顺序和取出顺序不一定一致
TreeSet : 存进去的元素,会按照某个规则进行排序
1.2 使用方式
Set 可以使无序的数据输出成有序的.
注意 : 重复的数据添加不进去
2 排序
2.1 Comparable
TreeSet为什么可以排序?
因为添加的元素都实现了Comparable接口
在向TreeSet中添加数据的时候,会自动调用该对象的compareTo()方法
所以 存储自定义类型的时候,如果要使用TreeSet 那么 必须实现Comparable接口
2.2 Comparator
List想要排序,元素必须实现Comparable接口
如果没有实现 需要用 Comparator
比较器两种方式 :
1 要添加的元素实现Comparable接口并覆写compareTo方法
2 集合比较器 : Comparator比较器,元素自身不需要实现该接口
如果添加的元素不是我们自定义的类
1 假如该类有排序,但是不是我们想要的结果,比如Integer,默认升序
但是我们想要降序 可以使用 Comparator
2 假如该类没有排序,没有实现Comparable,那么我们想要排序还是要使用Comparator
因为类不是我们写的,所以我们无法更改人家的源码
如果添加的元素是我们写的,那么想要排序 使用 Comparable ,这样如果不能满足其他用户的排序规则,别人也可以使用 Comparator 进行更改
当comparable和comparator同时存在,那么 comparator的优先级大于 comparable
-------------
public static void main(String[] args) {
TreeSet set=new TreeSet(new Comparator() {
public int compare(Object o1, Object o2) {
Integer i1 = (Integer) o1;
Integer i2 = (Integer) o2;
// 0 说明重复,不添加
// 大于0 往后放
// 小于0 往前放
return i2 - i1;
}
});
set.add(1);
set.add(3);
set.add(6);
set.add(2);
System.out.println(set);
}
-------------
3 范型
范型 : 类型检查,在编译时检查类型是否匹配
集合中 什么元素都能保存,太杂,优点就是可以保存任意类型的数据,缺点 就是操作起来必须先强制类型转换才行,否则因为多态,无法访问特有属性
引入范型之后,那么该集合中就只能保存指定类型,优点 : 操作起来方便,缺点 : 只能保存指定的类型
而结合实际操作,我们绝大部分都是用来保存统一类型的数据的
范型 只能写引用类型,不能写基本类型
3.2 使用
在源码中使用E表示了范型
使用大写字母表示 : A,B,C,D,E,F,......X,Y,Z 都是可以的,只不过是一个占位符而已
但是还是要合理选择
? 表示不确定的类型
T(Type) : 表示是一个具体的java类型
E(Element) : 表示是元素的类型 (集合中保存的是元素)
如果说规定了泛型,但是没有传入泛型类型,那么 默认是Object
3.3 自定义范型
例子: