List的实现类集合

2020-04-20  本文已影响0人  Hoffnung_8164

集合:

    概念:也叫容器,理解为存储数据的。动态的存储多个对象。——元素Element

       动态:集合的大小随着存储的数据的个数而改变。

        对象:集合中存储的都是引用类型的数据。(对象的地址)

    集合的结构:

        父接口:Collection,关于集合的最基本的规则。

                    add()-->boolean,向集合中添加元素。

                    remove()-->boolean,从集合中删除指定的元素。

                    size()-->int,获取集合的长度。集合中存储的元素的个数

                    iterator()-->Iterator,获取该集合上的迭代器对象,用于遍历集合,获取里面的每一个元素。

                    contains()-->是否包含指定的元素。

                    clear()-->清空集合

                    addAll(),removeAll(),toArray().....

    子接口:List

            特点:

                1、有序,有下标,有位置。

                2、允许重复的元素

        新增的方法:大多和下标有关

                add(index,E)-->允许在指定的位置添加新增的元素。

                remove(index)-->根据下标删除元素

                get(index)-->获取元素

                set(index,E)--->根据下标,替换元素

                indexOf()-->搜索指定的元素,返回下标,如果元素没有,返回-1。

                subList(fromIndex,toIndex)-->截取子容器

                iterator()

                listIterator()

    泛型:

            概念:广泛的类型。指定一个类型。

            作用:存入到集合中的元素,Object类类型,自动向上转型。当获取的时候,需要手动的向下转型,降低效率,容易出错。使用泛型,指定集合中存储的元素的数据类型,保护容器中数据类型的安全。

                String-->Object,Person-->Object ...

                String-->String,Person-->Person

        使用:创建集合的时候,使用泛型来指明该容器能够存储的数据类型。

            语法格式:

                   容器<数据类型> 容器对象 = new 容器<>();

            注意点:

                    集合中的泛型:限于引用类型,基本类型需要写成对应的包装类类型。

            迭代器:

                用途:专门用于遍历集合中每一个元素的。

                工作原理:

                    step1:先获取Collection上获取迭代器对象:iterator()--->Iterator对象:it

                    step2:调用迭代器hasNext(),用于判断迭代器是否有下一个元素可以迭代获取。

                                boolean:true,false

                    step3:调用next(),获取下一个元素。迭代器对象会向后移动一个位置。

    Iterator接口中:

                hasNext()-->是否有下一个元素。

                next()-->获取下一个元素对象,同时迭代器对象向后移动一个位置

                remove()-->移除,已经迭代出的最后一个元素。也就是移出了迭代器左侧的元素。

注意点:

    1、当迭代器进行迭代工作的时候,不能操作集合本身进行添加或删除工作;如果想删除元素,使用迭代器子代的remove()进行删除。

    2、迭代器工作的时候:先调用hasNext(),判断是否有可以迭代的元素,调用next()。否则异常:NoSuchElementException。

集合的遍历迭代:

    1、Collection集合:没有下标

        A:Iterator迭代器来遍历

        B:for-each,增强for循环

    2、List集合:有下标

        A:Iterator迭代器来遍历

        B:for-each,增强for循环

        C:普通for循环,结合get(index)-->E

        D:ListIterator迭代器也能遍历。

2.1、ArrayList集合

    ArrayList集合,底层实现:采用数组的结构实现的。(最大的特点:内存连续)。

    也会叫做变长数组。

        优点:遍历集合中的元素,效率很高

        缺点:更改集合中的元素,效率相对低。

2.2、LinkedList集合

    LinkedList集合:底层实现:采用双向链表的结构实现。

            优点:更改集合中的元素,效率很高。

            缺点:遍历集合中的元素,效率相对低。

        queue:队伍,队列,行列

            生活中买电影票,排队

            生活中买火车票,排队

deque:double -ended queue,双端队列

LinkedList实现类,区别于ArrayList,除了实现List接口,还实现了Deque接口。

LinkedList实现类:

    实现的接口:

        List接口----------------------------------->Collection

        Deque(双端队列)接口----->Queue(队列)接口------>Collection

    模拟栈的结构:后进先出(LIFO),栈顶元素,

            push(),压栈,入栈,pop(),弹栈,出栈

    模拟队列的结构:先进先出(FIFO),队头元素

        offer(),poll()

栈的结构特点:

队列的结构特点:

对比ArrayList,LinkedList,Vector实现类

    A:ArrayList,底层采用数组结构的实现的。(内存中连续空间)。jdk1.2

        只实现了List接口,功能都是List接口中规定的。

          优缺点:

                优点:遍历访问元素,效率很高

                缺点:插入或删除元素,效率相对低。

    B:LinkedList,底层采用双向链表结构实现的。(元素在内存中不挨着,元素之间的指向)。jdk1.2

        实现了List接口的同时,还实现了Deque接口,所以有这两个接口中的功能。

        优缺点:

                优点:插入或删除元素,效率很高。

                缺点:遍历访问元素,效率相对低。

        注意点:

                如果一个集合,频繁的添加或删除元素,建议选择LinkedList。

                如果一个集合,绝大多数的操作就是遍历查询,建议选择ArrayList。

                如果要模拟栈,队列等结构,建议选择LinkedList。

    C:Vector,是ArrayList的前身。也是数组的结构。古老的类。从jdk1.0的版本就有了。

        线程安全,效率低,后来被ArrayList替代了。

        ArrayList和LinkedList都是线程不安全的,效率高。Collections工具类,可以获取线程安全的集合。

上一篇 下一篇

猜你喜欢

热点阅读