总结:线性表

本文介绍了线性表这一基本且常用的数据结构,包括其定义、分类和优点。线性表分为一般线性表和受限线性表,如栈和队列。在Java中,线性表的实现包括ArrayList、Vector和LinkedList,各有特点,如ArrayList基于数组,适合查找;Vector线程安全;LinkedList适合频繁插入和删除。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

线性表的定义:

线性表是最基本、最简单、也是最常用的一种数据结构。线性表是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。

分类:

我们说“线性”和“非线性”,只在逻辑层次上讨论,而不考虑存储层次,所以双向链表和循环链表依旧是线性表。在数据结构逻辑层次上细分,线性表可分为一般线性表和受限线性表。一般线性表也就是我们通常所说的“线性表”,可以自由的删除或添加结点。受限线性表主要包括栈和队列,受限表示对结点的操作受限制。

优点:

线性表的逻辑结构简单,便于实现和操作。因此,线性表这种数据结构在实际应用中是广泛采用的一种数据结构。

1.ArrayList(顺序表)

是用一段 物理地址连续 的依次存储数据元素的 线性结构(逻辑上也连续)
一般采用 数组 存储,也就是在数组上增删查改

ArraList的add方法源码展示:

transient Object[] elementData;
public void add(int index, E element) {
        if (index > size || index < 0)
            throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
 
        ensureCapacityInternal(size + 1);  // Increments modCount!!
        System.arraycopy(elementData, index, elementData, index + 1,
                         size - index);
        elementData[index] = element;
        size++;
    }

用于添加数据

2.Vector

vector的add方法源码展示:

 public synchronized void insertElementAt(E obj, int index) {
        modCount++;
        if (index > elementCount) {
            throw new ArrayIndexOutOfBoundsException(index
                                                     + " > " + elementCount);
        }
        ensureCapacityHelper(elementCount + 1);
        System.arraycopy(elementData, index, elementData, index + 1, elementCount - index);
        elementData[index] = obj;
        elementCount++;
    }

ArrayList和vector的区别:

底层都是数组,而ArrayList线程是不安全,而vector是线程安全的。

3.LinkedList

(1):顺序存储结构需要预分配存储空间。单链表不需要分配存储空间,元素限制不受控制
(2):选择顺序存储结构-线性表需要频繁查找,很少进行插入和删除操作。使用单链表结构-元素个数变化较大或者根本不知道有多大时
(3):链表改不改变,应该准确理解为链表头指针地址是否改变。

源码展示:

transient Node<E> first;  
 private static class Node<E> {
        E item;
        Node<E> next;
        Node<E> prev;
 
        Node(Node<E> prev, E element, Node<E> next) {
            this.item = element;
            this.next = next;
            this.prev = prev;
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值