zoukankan      html  css  js  c++  java
  • Java Se :线性表

     Java的集合框架分为两个系列,Collection和Map系列。在大学期间,学习数据结构时,好像学习了线性表、非线性表、树,哎,都给忘了。其实,在Collection系列内部又可以分为线性表、集合两大类。

    常用的线性表有:ArrayList、LinkedList、Vector、Stack、Queue。

    其中Stack、Queue是特殊的线性表。他们的特殊性表现在:

    Stack是先进后出,FILO,也叫后进先出:LIFO。

    Queue是先进先出,FIFO。

    Collection系列中还有Set集。他们的实现比较复杂。后续将说明。

    另外一个系列是Map,Dictionary为代表的<Key, Value>集合,具体如何实现,将在后续说明。

    ArrayList

    正如它的名字一样,JDK中确实是使用数组实现的。elementData就是。

     

    另外,这个类中也提供了直接转为数组的方法:

     

    数组的特征是可以快速查询,但是插入、删除操作不方便。

    LinkedList

    看到这个名字,你可能会想到他是个单链表。如果这样想,只能说是对了一半。它确实是个链表,但不是一个单链表,而是一个双向链表。

    下面看看源码:

     

    看看这个Entry<K>到底是个什么玩意:

     

    如果是单链表,有next就可以了,而不需要有previous。

    双向链表的特征是:查找不方便,增删方便。

    Vector

    Vector汉语意思是向量,从名字上就可以知道是一个可变的集合。它是一个可变数组。

     

    它和ArrayList都采用数组实现,但是他俩个有明显的区别,而这个问题也是面试时常会考到的问题。

    Stack

    Stack,后进先出,也就是说每次取数,都是取出最后一个。

    这个特性实现起来一点也不难,使用数组就可以实现了。接下来看看JDK中是如何实现的:

     

    JDK中也是使用数组的。

    Queue

    这是一个接口,在并发编程中使用很多。下面列出了Queue的实现类:

     

  • 相关阅读:
    在QT函数中返回一个数组/把一个数组传参给函数
    QT储存内容到指定的文件内
    QT对linux下/sys/class/gpio中的gpio的控制
    QT 线程的暂停和继续
    QT的close和系统的close冲突
    画动态曲线另一种方式方式
    QT关于iCCP警告去除
    ps两张图片合在一起
    ps 做动态图
    解决MFC中因控件类多次Attch造成的销毁窗口过程中CWnd* pWnd = CWnd::FromHandlePermanent(hWnd); ASSERT(pWnd != NULL); 断言失败的问题
  • 原文地址:https://www.cnblogs.com/f1194361820/p/3990193.html
Copyright © 2011-2022 走看看