Java数据结构——线性表、队列、栈、堆、集合、散列表、映射的概念

  • 1. 合集Collection
  • 2. 迭代器Iterator
  • 3. 线性表List
    • 3.1. 关于ListIterator接口
    • 3.2. 数组线性表类ArrayList
    • 3.3. Vector
    • 3.4. 链表类LinkedList
  • 4. 栈Stack
  • 5. 队列Queue
  • 6. 集合(set)
    • 6.1. 关于接口SortedSet
  • 7. 映射
    • 7.1. 散列(哈希)
    • 7.2. 映射表(Map)

1. 合集Collection

Collection接口是处理对象合集的根接口,此接口中包含了大量的集合接口以及这些接口的实现类和操作他们的算法,具体而言,主要提供了List(列表)、Queue(队列)、Set(集合)、Stack(栈)和Map(映射表,用于存放键值对等数据结构),其中List(列表)、Queue(队列)、Set(集合)、Stack(栈)都继承自Collection接口。

2. 迭代器Iterator

  1. Iterator接口用于在不需要暴露数据是如何保存在数据结构的细节的情况下,来遍历一个数据结构。他会返回一个实现了Interator接口的是对象。
  2. Collection接口继承自Iterator接口,Iterator接口提供iterator方法,他会返回一个迭代器,为遍历各种类型的元素提供了统一的方法。(增强的for循环)
  3. 如果对正在被迭代的集合进行结构上的改变,那么迭代器将不再合法,会有异常抛出。

3. 线性表List

定义了一个用于顺序存储元素,允许重复的有序合集,它有三个具体的实现类:

  • 数组线性表类ArrayList
  • 链表类LinkedList
  • 数组类Vector

3.1. 关于ListIterator接口

此接口扩展了List的Iterator接口的功能。方法previous和hasPrevious使得对表从后向前遍历得以完成。

3.2. 数组线性表类ArrayList

  1. ArrayList用数组存储元素,这个数组是动态创建的,即可以动态的改变数组的长度,默认扩充为原来的1.5倍(没有提供方法来设置空间扩充的方法)。
  2. 它会在内存中开辟一块连续的空间来存储,由于数据存储是连续的,所以支持用序号访问元素。
  3. 没有一个方法是同步的,所以他是线程不安全的。
  4. 优点:对数据的索引速度比较快;缺点:对于数据的增减删除速度比较慢

3.3. Vector

  1. Vector与ArrayList一样,最大的区别就是Vector中的绝大部分方法都是直接或者间接同步的,他是线程安全的。
  2. Vector在扩展长度时默认扩展为原来的2倍,每次扩充的空间的大小是可以设置的。

3.4. 链表类LinkedList

  1. 链表中的每个元素都包含一个称为结点的结构。每个结点与它的相邻结点相连接。每个结点都包含元素和一个名为next的数据域,next指向下一个元素,如果结点是线性表中的最后一个,那么它的指针数据域next的值为null。
  2. 单链表:包含一个指向线性表第一个结点的指针
  3. 循环单链表:链表中最后一个结点的指针指向第一个链表,其余的结点与单链表类似。
  4. 双向链表:包含两个指针的结点,一个指针指向下一个结点,另一个指针指向上一个结点,分别称为前指针和后指针。
  5. 优点:对于增加删除的速度比较块,缺点:对于随机访问的速度比较快
  6. 它是线程不安全的。

4. 栈Stack

  1. Java API中栈继承于Vector类,也可以使用ArrayList和LinkedList来实现栈。
  2. 栈是限制和插入只能在一个位置进行的表,这个位置为表的末端,叫做栈的顶(Top).栈也叫做 后进先出表。栈顶的元素是唯一可见的元素。
  3. 栈的操作一般有进栈(push)和出栈(pop)

5. 队列Queue

  1. 队列也是表,使用队列时插入在一端进行,而删除在另一端进行。可以使用数组实现也可以使用链表实现。

6. 集合(set)

  1. 集合set是一个存储和处理无重复元素的高效数据结构,它有三个具体类:
    • 散列类HashSet
    • 链式散列集LinkedHashSet,此类继承与hashSet
    • 树形集TreeSet

6.1. 关于接口SortedSet

  1. 此接口继承于接口Set,保证其中的各项处于有序的状态。他的实现类是TreeSet

7. 映射

7.1. 散列(哈希)

  1. 哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把散列码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

  2. 映射又分为散列映射和树映射:

    • 散列映射就是上面所介绍的根据散列码值映射唯一的value
    • 树映射指的是用键的整体顺序对元素进行排序,并将其组织成搜索树,最常用的实现类TreeMap

7.2. 映射表(Map)

  1. Map是一个接口,代表由关键字以及他们的值组成的一些项的集合。关键字必须是唯一的,但是若干个关键字可以映射到相同的值。因此值不必唯一。

  2. SorttedMap继承于Map接口,映射中的关键字保持逻辑上的
    有序状态,实现类是TreeMap

  3. Map接口没有实现Iterator迭代器,因此遍历Map接口一般使用foreach方法,并提供一个接受键和值得lanbda表达式。

  4. Map中的元素是无序的,它的实现类LinkedHashMap在里面维护了一个链表,用来记住插入元素项的顺序。

你可能感兴趣的:(数据结构)