黑马程序员——基础知识——集合

来源:互联网 发布:解析json文件的代码 编辑:程序博客网 时间:2024/05/23 19:18
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

Day15    面向对象 集合 IO 反射

集合是一个体系,一个更强大的容器,类很多,体系中功能很多

15.01 对象数组的概述和使用

       1、案例演示

              需求:我有5个学生,请把这5个学生的信息存储到数组中,并遍历数组,获取得到每一个学生信息

       2、画图演示

              把学生数组的案例画图讲解

              数组和集合存储引用数据类型,存的都是地址值



15.02 集合的由来及集合继承体系图

       1、集合的由来  集合和数组都是容器,而集合是变化的容器

              数组长度是固定的,当添加的元素超过了数组的长度时需要对数组重新

定义,太麻烦,java内部给我们提供了集合类,能存储任意对象,长度时可以改变的,随着元素的增加而增加,随着元素的减少而减少。

       2、数组和集合的区别

              区别1:

                     数组既可以存储基本数据类型,又可以存储引用数据类型,基本数

据类型存储的是值,引用数据类型存储的是地址值

                     集合只能存储引用数据类型(对象),集合能否存储基本数据类型,

也能,但是在存储的时候会自动装箱变成对象,变对象了,例如100,就变成了new Integer(100)

              区别2:

                     数组长度是固定的,不能自动增长

                     集合的长度是可变的,可以根据元素的增长而增长

       3、数组和集合什么时候用,以下是从内存角度考虑

              如果元素个数是固定的推荐用数组,效率比较高

              如果元素个数不是固定的推荐用集合,而集合的内存是随对象的增加而

一点点增加上去的,随着对象的增加,就会新开辟数组对象,而原数组对象就变成了垃圾。

       4、集合继承体系图



15.03 Collection集合的基本功能测试

       1、案例演示

              基本功能演示

       是util包下的,是一个接口(全是抽象方法),List、 Set是其子接口,其他是实现类

       2、注意:

       在EditPlus中如果不加泛型,编译的时候就会出现以下提示:

              collectionXxx.java使用了未经检查或不安全的操作

              注意:要了解详细信息,请使用-Xlint:unchecked重新编译

              Java编译器认为该程序存在安全隐患

              温馨提示:这不是编译失败,所以先不用理会,等学了泛型就知道了,

泛型的作用就是为了安全隐患的事




15.04 集合的遍历之集合转数组遍历,以后用迭代

       1、集合的遍历其实就是依次获取集合中的每一个元素

       2、案例演示

              把集合转成数组,可以实现集合的遍历

              toArray()



15.05 Collection集合的带All功能测试

       1、案例演示





15.06 集合的遍历之迭代遍历

       1、迭代器概述

              集合是用来存储元素,存储的元素需要查看,那么就需要迭代(就是遍历)

       2、案例演示

       Iterator是util包下的



15.07 Collection存储自定义对象并遍历

       1、案例演示



15.08 迭代器的原理及源码解析

       1、迭代器原理:迭代器是对集合进行遍历,而每一个集合内部的存储结构都是不同的,所以每一个集合存和取都是不一样,那么就需要在每一个类中定义hasNext()和next()方法,这样做是可以的,但是会让整个集合体系过于臃肿,迭代器是将这样的方法向上抽取出接口,然后再每个类的内部,定义自己的迭代方式,这样做的好处有二:1、规定了整个集合体系的遍历方式都是hasNext()和next()方法;2、代码由底层内部实现,使用者不用管怎么实现的,会用即可。

       2、迭代器源码分析

              查找Iterator()方法,返回值类型是new Itr(),说明Itr这个类实现Iterator接口,查找Itr这个内部类,发现重写了Iterator中所有的抽象方法

              hasNext() 方法去判断指针是否小于等于长度,next()方法将指针+1并返回获取到的值

 

15.09 List集合的特有遍历功能

Collection的子接口

       1、List集合的特有功能概述




15.10 List集合存储学生对象并遍历



15.11 并发修改异常产生的原因及解决方法

       1、案例演示



2、ConcurrentModificationException出现

              迭代器遍历,集合修改集合

       3、解决方案

              迭代器迭代元素,迭代器修改元素(ListIterator的特有功能add)

              集合遍历元素,集合修改元素


 

15.12 ListIterator



15.13 Vector的特有功能

       1、概述 属于JDK1.0版本,Vector是同步的

       2、特有功能(element英文是元素)

              public void addElement(E obj)

              public E elementAt(int index)

              public Enumeration elements()

       3、案例演示

              Vector也继承了Iterator,也可按Iterator的方法遍历,原来的迭代如下:

              boolean  hasMoreElement()相当于hasNext()

              E  nextElement()相当于next()



15.14 数据结构之数组和链表

       1、数组ArrayList Vector

              查询快修改也快,有索引找索引就行了查询很快

              增删慢,需要将添加位后面所有元素都移动重赋索引值,再插入一个新值,删除也一样,后面所有元素都要移动

       2、链表LinkedList 后面的对象记住前面对象的地址值,就和链子一样

              查询慢,修改也慢   从第一个开始挨个询问

              增删快  添加一个只需要记录俩地址值就行了,其他的都不变

       以上两个是相对对方而言

 

15.15 List三个子类的特点

       1、List三个子类的特点

              ArrayList:

                     底层数据结构是数组,查询快(查询快当然修改快),增删慢

                     线程不安全,效率高

              Vector:

                     底层数据结构是数组,查询快,增删慢

                     线程安全,效率低

              Vector相对ArrayList查询慢(线程安全的)

              Vector相对LinkedList增删慢(数组结构)

             

              LinkedList:

                     底层数据结构是链表,查询慢,增删快

                     线程不安全,效率高

             

              Vector和ArrayList的区别,共同点底层都是数组结构

                     Vector是线程安全的,效率低

                     ArrayList是线程不安全的,效率高

              ArrayList和LinkedList的区别,共同点就是都是线程不安全的

                     ArrayList底层是数组结构,查询和修改快

                     LinkedList底层是链表结构的,增和删比较快,查询和修改比较慢

       2、List有三个儿子,我们到底用谁呢

              查询多用ArrayList

              增删多用LinkedList

              如果都多用ArrayList

              (Vector只在面试时候用)



0 0