Java数据结构——ArrayList

来源:互联网 发布:全球煤炭储量知乎 编辑:程序博客网 时间:2024/06/07 07:09
  • 数据结构的分类
    集合
    线性结构
    数结构
    图结构

  • Java中常用集合类
    这里写图片描述

  • 线性结构
    Java中使用List接口描述线性结构,其实现类使用最频繁的有ArrayList(数组线性表)和LinkedList(双向链表)。List接口定义的常用方法如下表:
    这里写图片描述


    数组线性表ArrayList

    ArrayList使用连续的内存单元存储数据元素,当添加或删除数据元素时(除数组线性表的最后位置外),ArrayList需要移动其被添加(或删除)元素后面的全部元素。在遍历所有元素方面,ArrayList具有很好的效率,因为其数据元素的连续性,所有只需要获取到第一个元素的地址,再使用地址指针下移的方式即可获取全部元素。

    • ArrayList适合存储经常用于显示的数据,并且不对查询结果进行修改,而仅仅是用于客户显示
    • 如果我们只是在ArrayList的末尾进行添加(或删除)操作,可以使用ArrayList
  • 泛型(简介)

    • 泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口和泛型方法。 Java语言引入泛型的好处是安全简单
    • 对于数据结构来说,泛型用于指定当前数据结构存储的元素类型,例如:ArrayList表示当前的数组线性表只能存储String类型的数据
    • 也可以在List中存储自定义类型,例如:LinkedList表示当前的双向链表中只能存储Student的对象
  • 数组线性表与数组的区别

    • 数组是定长有序的线型结合
    • 数组线性表是任意长度的线型集合

      • 两者本质的区别在与长度是否可变
    • 两者获取元素的方式不同

      • 数组:使用下标:array [index]
      • 数组线性表:使用get方法:list.get(index)
    • 获取长度的方式不同

      • 数组:length属性

      • 数组线性表:size()方法


双向链表LinkedList

  • LinkedList是使用指针关联的双向链表,其获取下一个元素的方式是通过指向下一个元素的地址对象(通常叫做指针)获取的,由于它的链式存储结构,LinkedList在任意位置的元素插入(或删除)效率都比较快,因为元素插入(或删除)不需要移动LinkedList中的其它元素,当需要一个频繁插入(或删除)的线性结构时,首选的List实现类应该是LinkedList。
  • 1.LinkedList对于ArrayList来说,其遍历速度较慢,因为他获取下一个元素的时间为寻址时间
  • 2.LinkedList适合存储数据元素变动较大的线性集合,可以更快速的对指定位置的元素进行增加、删除、修改和查询功能

  • ArrayList和LinkedList区别

  • ArrayList的存储空间是连续的,故对所有元素的遍历速度较快
  • LinkedList的存储方式是链式的,所以每个元素都记录了前元素和后元素,故插入元素和删除的速度较快


    Vector(介绍)

  • Vector是一个Object类型的可变长的数组,其元素类型可以是任意的数据类型(Object的子类),我们使用Vector通常是存储元素类型不同,但描述对象又统一的集合。
  • Vector与ArrayList的区别是Vector是线程安全的,故Vector相对于ArrayList的速度稍慢一些。
原创粉丝点击