A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Keai720 中级黑马   /  2019-3-27 18:06  /  790 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

集合的概述:

                1.用于存放内容的容器

集合的特点:

                 1.长度可变

                 2.只能存放引用数据类型   



集合的体系

        顶层父类  collection     

        Jdk 1.5 以后提供了一个父类 Iterable  --> 目的: 使用迭代器进行迭代  (屏蔽底层的不同)

        两个体系的子类

                  List

                         1.有序(存进去的和取出来的顺序一致)               

                         2.索引 : 底层是数组  

                         3.可重复

                  Set     

                         1.无序(存进去的顺序和取出来的顺序不一致)

                         2.无索引 :底层是哈希表          

                         3.不可重复

常用的方法

           add(E e)

                list.add(1)

                list.add(2)

                         经历自动装箱

           remove(E  e)

                 list.remove(1)

                         如果删除成功返回 true

                         如果删除失败返回false

           size

                 list.size 等同于  int [] arr   中的arr.length

              contains

                   list.contains(1)          判断当前集合中是否有 1 这个元素

                         如果有 : 返回true

                         如果没有: 返回false

          clear :清空集合中的元素

                   list.clear

                        注意:执行完此方法后,集合还在,但集合中的元素不在了

            isEmpty:判断这个集合是否为空 ,如果为空,返回true  ,否则返回false

            

迭代器的使用规则

1. Jdk 1.5 以后提供了一个父类 Iterable  
   1. Iterator   it =  list.iterator 方法
      1. while(it.hasNext() ){  it.next         }       
         hashNext 是判断是否有下一个元素
                       hasNext : 判断元素当前这个指针上是否有这个元素
            
              next : 取出下一个元素
            
                               1. 取出元素

                                   2.指针向后移动一位

1. 并发修改异常
   1. 在迭代器迭代的过程中,使用集合修改了集合的长度,此时就会抛出并发修改异常
   2. listIterator  来解决以上问题
      1.         ListIterator<String> lit =  coll.listIterator()
                  利用迭代器来进行集合长度的改变

  3.增强for 循环

                注意: 底层用的  是  迭代器

                 使用的语法

                        for(  集合/数组中对应的元素数据类型    变量名     : 需要遍历的数组/集合){

                                                 sout(变量名)

                         }

                 举例:

                         ArrayList<Integer> list = new ArrayList<Integer>()

                         list.add(1);  list.add(2) list.add(3)               

                          for(Integer  num  :  list){

                                         sout(num)

                          }

     4. 泛型定义:

                将数据类型灵活的运用到类,方法,接口上,作为参数传递

        泛型确定的时间:创建对象时

         泛型的好处:

                  1.数据类型确定,省去了强转的麻烦

                  2.将运行时异常转换成编译器异常

         泛型的缺点:     

                   1.只能操作同一种数据类型

                泛型类:

                          将泛型书写在Class类上

                          书写方式 :public class ArrayList<E>

                                 1.在创建对象时不写泛型:默认操作就是Object

                                  ArrayList list = new ArrayList ();  list.add(Object obj)

                                 2.写了泛型 --> 泛型什么就只能操作什么               

                                  ArrayList<String> list = new ArrayList ();         

                泛型方法

                                 静态泛型方法         public static <T>  void method1(T t);

                                 非静态泛型方法     public <T> void  method2(T t);

                泛型接口

                                 1.  直接在接口上定义泛型

                                                public class GenericInterfaceImpl1 implements GenericInterface<String>{}

                                 2.public class GenericInterfaceImpl2<I> implements GenericInterface<I>

                                                 主要应用到了泛型的传递

               泛型的通配符  ?

               泛型的限定

                                上限(开发中极有可能会使用到一种方式) 和 下限

                                   上线写法一

                                                public static  void getElement1(Collection<? extends Number> coll){}

                                    上线写法二:

                                                public static<T extends Number> void getElement1(Collection<T> coll){}

                                     下限(在你们的老师职业生涯中都从来没有看到使用过)

                                                public static void getElement2(Collection<? super Number> coll){}   (了解)


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马