java集合框架学习小结

为什么要引入集合框架?

    由于数组的弊端:

        1.长度不可变,一旦初始化长度固定;

        2.在n个地方需要存储多个数据,都需要专门去编写数组的操作方法,如此一来,没有体现DRY原则(不重复写代码)-----》即封装思想;

     3.即使每个人都是要使用数组的类,不同的人定义的类名方法名不同,实现细节也参差不齐;

     4.容器类好用,但是不能集中统一管理,不同的写的五花八门


什么是集合框架?

    集合框架是为表示和操作集合而规定的一种统一标准的体系结构。任何集合框架都包括三大块内容:

        1.对外的接口;

        2.接口的实现.

        3.集合运算的算法(底层都对应着某一种数据结构的算法


为什么要使用集合框架?

    1. 提供功能的复用(java.until包);

    2. 让程序员专注于业务开发,而不是数据结构以及算法;


常用集合类:

    Set集:对象不按特定顺序排序,不允许重复(就如同数学的集合);

    List(列表):对象按照索引位置排序,所以允许重复;

    Map(映射):集合中每一个元素都包含一对key和value对象,不允许key重复,但是值value可以重复,即可以一对多;

Set集合,List集合,Map集合区别画图帮助理解:

    java集合框架学习小结_第1张图片




Vector:

    设计原理(读源代码):

       底层用来存储数据的,我们通过Vector对象的add方法来存储数据,其实底层依然是存储到elementData数组中

    存储原理:

       通过源码分析,发现在Vector类中有一个Object类型数组

        1. 表面上把数据存储到Vector对象中,其实底层依然是把数据存储到Object数组中

        2. 我们发现该数组元素的类型是Object类型,意味着集合中只能存储任意类型的对象

        集合中只能存储对象,不能存储基本数据类型的值

        3.集合类中存储的对象,都存储的是对象的引用而不是对象本身,图示和代码如下:

        java集合框架学习小结_第2张图片


集合类的常用方法        java集合框架学习小结_第3张图片


栈(Stack):

    继承Vector,也是基于数组实现,因此把数组的最后一个元素未知作为栈顶,数据结构的一种,操作的永远是栈顶元素;

    存储特点:后进先出

    栈结构的实例:

        1. QQ消息,最顶上是最新的消息

        2. 手枪装弹,弹夹压弹之后,后装的先出去

      要来实现栈的存储结构可以使用数组,也可以使用链表

ArrayList

    (常用方法参照Vector

    java集合框架出现之后用来取代Vector类的

二者的区别:

    Vector类的方法使用了synchronized关键字,线程安全,性能较低,适用于多线程环境

    ArrayList类的方法都没有使用synchronized,不同步,线程不安全,但是性能较高

    即使在多线程环境下,也不用Vector类,我们使用

     List list = Collections.synchronizedList(new ArrayList(...));

相同点:

    底层原理都基于数组算法实现,一模一样

    设计上稍有区别,创建对象Vector会初始化一个长度为10的数组

    而ArrayList初始化的则是一个空数组,直到调用add方法才会初始化长度为10的数组


Linkedlist线程不安全,而多线程环境下需要保证线程安全)双向链表,单向队列,双向队列,栈的实现类;

Linkedlist实现单向队列和双向队列的接口,自身提高了栈操作的方法,链表操作的方法;

Linkedlist中存在很多功能相同的方法,因为Linkedlist表示了多种数据结构的实现,每一种数据结构的操作的方法名字不同




 





    

你可能感兴趣的:(集合框架,底层实现原理,图形代码帮助理解记忆)