黑马程序员_Collection框架知识点

时间:2023-02-17 09:25:31
---------------------- android培训 、 java培训 、 期待与您交流! ----------------------


1、 Collection 集合

        集合类的特点
        集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。
    
        iterator 迭代器 取出集合中的元素

        两个常用子类:
        a. List
        b. Set

2、List 序列
        a. 有序的; 存入的顺序和取出的顺序一致
        b. 元素是有索引的;
        c. 元素可以重复

        了解List接口的特有方法,注意:这些特有方法都是围绕着脚标定义的。

       a. add(index,element);

        b. remove(index);
        c. set(index,element);
        d. get(index);
    
        List接口支持,增删改查操作

               ---ListIterator 列表迭代器,可以同时操作容器
               ---Victor:数组结构的,是同步的。被ArrayList替代,因为效率低
               ---ArrayList:数据结构是数组结构,是不同步的。查询速度很快
               ---LinkedList:数据结构是链表结构,是不同步的。增删的速度很快

        List类中支持对对集合中元素进行迭代的同时对元素进行增、删、改、查
    
3、 注意LinkedList中的特有的方法,可以利用这些方法模拟堆栈,或队列
        addFirst();
        addLast();

        getFirst();
        getList();

       removeFirst();
        removeLast();

        offerFirst(E e);
        offerLast(E e);

        peekFirst();

       peekLast();

4、 set: 集   元素不可以重复
        set里面没有特殊的方法,其方法和Collection方法一致

5、 set的子类
        ---HashSet:  是不同步的  查询速度快,不能重复
               记住:存储到哈希表中的对象,必须覆盖hashCode和equals方法。建立在哈希表判断元素唯一性的方式。
        ---TreeSet:是不同步的  他可以对set集合中的元素进行排序。   数据结构是二叉树。
        TreeSet排序有两种方式:
        第一种:让元素自身具备比较性。让元素对象实现Comparable接口,覆盖compareTo方法。
               但是,需求中,需要元素的非自然排序时,或者元素本compareTo身就不具备自然排序,怎么办?
        第二种:让容器具备比较性。其实就是定义一个比较器,就是实现Comparator接口,覆盖compare方法。

        List结合判断元素是否相同使用的是equals方法;
        HashSet集合判断元素相同,依据hashCode和equals方法;
        TreeSet集合判断元素相同,依据compareTo或者compare方法的return 0;

        ArrayLIst:数组结构,所属于List,想到索引,查询快

        LinkedList:链表结构,所属于List,想到增删快

        HashSet:哈希表结构,所属于Set,想到唯一性,查询速度快

        TreeSet:二叉树结构,所属于Set,想到唯一性,而且排序,自然排序Comparable,compareTo  比较器排序,comparator  compare方法
        HashSet hs = new LinkedHashSet();//在哈希表基础上保证有序。


6、 泛型:先明确类型,存储时,如果类型不匹配,就编译时报错。
        a.JKD 1.5版本出现的新特性;
        b.泛型将运行时期的问题转移到了编译时期。
        c.避免了强制转换的麻烦
        d.泛型技术是用于编译时期的技术。

7、 泛型的体现:
        <>这就是用于定义类型参数的符号;泛型可以简单的理解为,接收具体的元素类型。
        对源码进行编译时,通过泛型进行类型的检查;如果类型没有问题,则将源码编译成class文件。
        注意,class文件中是不带有泛型信息的,这种情况称之为泛型擦除。
    
8、 类型操作的对象类型不确定,将泛型定义在类上;
        方法中操作的类型不确定,将泛型定义在方法上。

        如果是在静态方法上使用泛型,该泛型必须定义在方法上。

9、 泛型接口:定义的类实现了一个带有泛型的接口,覆盖接口方法的时候要符合泛型类型;

        在实现接口的时候,不明确泛型的类型,覆盖方法的时候继续使用泛型;

10、 泛型的限定:分两种 上限   下限:
        ? extends E: 上限  接收E类型或者E的子类型

        ? super E:下限  接收E类型或者E的父类型

11、 Map: 视图
        a.Map集合中存储的是一对儿元素,键和值。
        b.必须保证键的唯一性。
        c.如果存储键相同,值会覆盖。

        存的方式:put(key,value);
        取得方式:keySet(),entrySet().values();原理:就是将Map集合转换成set集合或者Collection,在通过Iterator取出。

        Map子类
               ---Hashtable:哈希表结构,同步的。null不可以作为键和值
               ---HashMap:哈希表结构,不同步的。替代了Hashtable。允许null以作为键和值 不保证顺序
               ---TreeMap:基于二叉树,不同步的,可以对map集合中的键进行排序。

12、 什么时候用Map集合?
        在分析需求中,如果出现了映射关系,就要先想到具备对应关系的容器。
        比如:数组,list,map
        如果对应关系的一方是有序的数字,可以考虑数组和list,元素固定考虑list。
        如果对象关系的一方没有有序的数字,就要想到map。

        通常这些对应关系的容器都可以用于查表法。

13、 Arrays:用于操作数据的工具类提供的很多常见的方法比如排序,搜索等
        该类中的方法都是静态的。

14、 数组转成集合List。List asList([]);

        好处:可以使用集合List的方法来操作数组中的元素。可以使用集合该查方法,只要不改变数组长度都可以。

        弊端:不可以使用集合的增删方法

        List集合使用的最终还是这个数组,数组的固定长度的。所以不可以对其进行增删。

        特殊情况:
        如果数组中存储的是基本数据类型,那么asList会将这个数组实体作为集合中的元素。
        如果数组中存储的都是对象,那么asList会将数组中的元素作为集合中的元素

15、 将集合转成数组。
        如果传递的数组长度小于集合的长度,在toArray内部会自动创建一个长度和集合相同的数组。用于存储集合的元素。
        如果传递的数组长度大于等于集合的长度,则使用该数组存储集合的元素
        一般情况下最好使用集合的size();

        限定数组的增删。

16、 Collections:
        a.用于操作集合的工具类。
        b.提供了很多静态方法。

        比如对List集合排序,二分查找,位置置换。对排序的元素进行逆转。reverseOrder
        还可以获取集合的最大值。
        最牛叉的是将非同步的集合转换成同步的集合synchronizedXXX

17、 新的for循环。
        格式:for(元素类型 变量名:Collection集合or数组)
                 {
                       执行语句;    
                 }

18、 传统for和foreach的区别?
        foreach循环必须有被遍历的目标,要么是Collection,要么是数组。

        建议遍历数组是,用传统for循环,因为可以对数组的角标进行操作。

19、 可变参数 int... arr
        可变参数用于简化书写,
        注意:只能定义在参数列表的最后。

20、 System.getProperty("line.separator");可以实现在任何操作系同下的换行,因为该功能获取了当前系统的换行符。

21、 RunTime类:没有结构函数,不可以实例化,但是还提供了非静态方法。所以应该会提供静态的返回值类型为RunTime的方法获取该对象。

22、 Math:用于数学运算的类。提供了数学运算的静态方法

        ceil 返回大于参数的最小整数

        floor 返回小于参数的最大整数

        round 四舍五入

        max(a,b)返回两个数中最大的一个
    
        pow(a,b);返回a的b次幂

23、 日期对象和毫秒值之间的转换。
        毫秒值转成--->日期对象
        a.new Date(long);构造函数方法;
        b.setTime(long);

        获取日期对象,可以通过对对象的方法对该日期进行指定字段的操作。

        日期对象转成毫秒值--->通常用于进行运算--->通过Date对象的getTime方法
    
24、 import的出现是为了简化类名的书写


---------------------- android培训 、 java培训 、 期待与您交流! ----------------------
详细请查看:www.itheima.com