Day-16

比较器、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        自定义范型

例子:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值