hadoop学习序曲之java基础篇--java泛型以及集合类复习

来源:互联网 发布:centos 7 服务器配置 编辑:程序博客网 时间:2024/04/29 03:39
在我们类中方法上定义泛型
 * 1、如果类上面定义了泛型,可以直接使用类上面定义的泛型
 * 2、如果方法有返回值,而且返回值不确定是什么类型,我们也可以使用泛型来作为方法的返回值
 *        返回值的类型不一定和我们类上面的泛型一直
 * 3、如果方法是静态方法的时候,那么就需要在static和返回值中间指定要使用的泛型
 * 我们发现,泛型也是有局限性的:一旦指定类上的泛型之后,在方法调用的时候就只能使用指定类型

在接口上定义泛型

我们也可以使用?(通配符)来完成上面方法sop的功能,
     * 不同之处在于我们无法使用?来接收it.next()的返回值
     * 而且也不用在static方法上面进行<T>声明了,这种方式的书写要比上面简便一点
     * ?在那种场合下会使用的多一些呢?
     *     在我们的泛型限定中经常来使用?通配符


Set:是一个无序的元素不可重复的集合 (存入的顺序和取出的顺序,不一定一致)
 *    |--HashSet:底层采用的数据结构是哈希表,如何判断其中元素唯一性呢?
 *                是不是通过元素本身的hashCode返回值,如果hashCode返回值相等?
 *                就要判断元素本身的equals是否返回为true?
 *                    true--->不存
 *                    false-->存
 *    |--TreeSet:可以对我们Set集合进行排序。
 *            用String做例子,我们发现,这种排序是对字符串进行的自然排序

treeSet的第二种比较的方式:
         * 当我们的元素不具备比较性,或者元素自身的比较性不能满足我们业务需求的时候,
         * 我们这时就哟采用第二种比较的方式——让我们集合具备比较性。
         * 要说明一点的是:需要再我们集合创建的时候就要指定相应的自定义的比较器Comparator
         * 要求:
         * 按照person的姓名进行比较,当姓名相同的时候再按照person进行比较进行比较。
         * 
         * 当我们的主要比较条件无法满足比较(分不出大小的时候),我们就需要按照次要条件进行比较了
         * 记住:当我们的元素和集合都具备了比较性的时候,优先使用集合提供的比较器

我们发现无法存入自定义的对象,因为我们自定义的对象不能转化为Compareable
         * ClassCastException: cn.crxy.collection.treeset.BeautifulGirl 
         * cannot be cast to java.lang.Comparable
         * 也就是说,我们自定义的对象不具备比较性
         * 如果要让我们自定义的对象存入TreeSet,那就必须要让自定义的对象实现implements Comparable接口
         * 那么就必须要覆盖Comparable接口中的唯一方法compareTo(Object)
         * 要求:
         * 按照bg的年龄进行比较,当年龄相同的时候再按照bg的姓名进行比较。
         * 当我们的主要比较条件无法满足比较(分不出大小的时候),我们就需要按照次要条件进行比较了

要求:给定一堆字符串,按照字符串的长度进行排序(升序)
 *    如果长度相同,按照自然顺序进行排序
 *Collecion 
 *    |--List:可以重复且有序
 *        |--ArrayList:数组;查询快,增删慢;线程不安全,jdk1.2
 *        |--LinkedList:链表,查询慢,增删快;线程不安全;jdk1.2
 *        |--vector:数组,查询慢,增删慢;线程安全,jdk1.0
 *    |--Set:元素无序且不重复
 *        |--HashSet:hash表;如果判断元素的唯一性:
 *                比较它的hashCode,如果hashCode值相等,
 *                ==》equals,是否返回true
 *                true?==》认为是同一个元素,不存
 *                false?==》不是同一个元素,存入
 *        |--TreeSet:二叉树,是一个有序的set,这个顺序默认是自然顺序
 *            有两种比较的方式:
 *                元素具备比较性,需要实现Comparable接口,复写compareTo(obj)方法
 *                集合具备比较性:需要再集成创建的时候,指定相应的比较器
 *                推荐大家使用第二种的前提下,看我们的具体的业务需求
 *                执行顺序:当集合和其中的元素都具备比较性的时候,会优先使用集合的比较器。
0 0