Collection&泛型学习

1 Collection

(1)集合框架的概念

        1)集合按照存储结果不同,可分为单例(Collection)和双列(Map)集合两类;

        2)Collection集合元素有两个重要的子接口:list和set

            1)List:有序(存和取的元素顺序一样),元素可重复,具有索引

            2)set:无序(存和取的元素顺序不一定一样),不具有索引

        3)Collection的体系结构图

Collection&泛型学习

(2)Collection集合的常用方法

    (1)add()  remove()  clear()  size()  

             contains()  isEmpty()   toArray()   iterator()

 

(3)迭代器

      1)迭代器是用来遍历没有所以的集合,例如set集合

      2)Collection接口继承了Iterator(也是集合的一员)接口:使用iterator()获取迭代器接口实例

      3)迭代器原理:创建实例对象后,指针执行迭代集合首元素的前一个位置,然后使用next获取该地址的下一个元素,获取后地址自动加1

 

(4)增强for循环

    1)是一种高级的for循环,底层使用迭代器实现

    2)只能用来遍历,遍历时候不能进行增删操作,否则会报异常

    3)书写的格式较为简洁,开发中比较经常用到

 

2 泛型

      1)泛型概念:是一种引用数据类型约束,在集合中比较常见

      2)泛型的好处

          1)自动进数据类型的转换

          2)将运行时期的类型转换异常提升到编译时期

      3)定义和使用含有泛型的类、方法、接口

          1)定义泛型类的格式:修饰符 class 类名<代表泛型的变量> {  } 

          2) 定义泛型方法的格式:修饰符 <代表泛型的变量> 返回值类型 方法名(参数){  }

          3)接口定义泛型有两种确定形式

               1)在被类实现的时候,确定泛型

               2)在创建对象的时候确定泛型,这个时候类的泛型要跟着接口的泛型

          4)泛型只能传入引用类型,不能传入基本数据类型

      4)泛型通配符(?)

         1)泛型的通配符作用:进行参数传递的时候,不确定使用什么类型进行传递,可以使用通配符

         2)特点

             1)使用通配符时候,不能创建对象使用,只能作为方法参数使用

             2)泛型没有继承的概念,不能使用Object代替所有的泛型

                例子:public static <T> void demo5(Collection<Object> coll){}

                           ArrayList<Integer> list1 = new ArrayList<>();

                           demo5(list);//出错,不能用Object代替所有的泛型

             3)泛型通配符的高级使用

                  1)上限<?extends E>:只能使用类的泛型的子类及其本身

                  2)  下限<? super E>:只能使用泛型的父类及其本身