线性表之何时使用ArrayList、LinkedList?

前言

  线性表不仅可以存储重复的元素,而且可以指定元素存储的位置并根据下表访问元素。

  List接口的两个具体实现:数组线性表类ArrayList、链表类LinkedList

ArrayList

  ArrayList使用数组存储元素,这个数组是动态创建的。如果元素个数超过了数组的容量,就会创建一个更大的数组,并将当前数组中的所有元素都复制到新数组中。另外需要注意的是,ArrayList容量可能根据元素的增加而自动增大,但是不能自动减少。可以使用trimToSize()将数组容量减少到线性表大小。

LinkedList

  即是使用一个链表来进行存储元素。因此可以提供从线性表的两端插入和删除元素的方法。

1. 若要提取元素或在线性表的尾部插入或删除元素,不能再其他位置插入或者删除元素,那么ArrayList效率较高。

2. 但是如若需要在线性表的任意位置插入或者删除元素,LinkedList则为最佳。

3. 如果不需要在线性表中插入删除元素,只是访问元素的话,数组则是效率最高的数据结构。

时间: 2024-10-10 19:56:51

线性表之何时使用ArrayList、LinkedList?的相关文章

Java实现线性表-顺序表示和链式表示

顺序表示和链式表示的比较: 1.读写方式:顺序表可以顺序存取,也可以随机存取:链表只能从表头顺序存取元素: 2.逻辑结构与物理结构:顺序存储时,逻辑上相邻的元素其对应的物理存储位置也相邻:链式存储时,逻辑上相邻的元素,其物理存储位置则不一定相邻: 3.查找.插入和删除操作: 按值查找,当线性表在无序的情况下,两者的时间复杂度均为o(n):而当顺序表有序时,可采用折半查找,此时时间复杂度为o(log n): 按位查找,顺序表支持随机访问,时间复杂度为o(1):而链表的平均时间复杂度为o(n). 顺

集合线性表--List之ArrayList

集合操作——线性表 List: add().remove().subList().list.toArray().array.asList(). List排序:  Collections.sort(list);    Comparable. comparator ListList接口是Collection的子接口,用于定义线性表数据结构:可以将List理解为存放对象的数组,只不过其元素个数可以动态的增加或减少.并且List是可重复集 ArrayList和LinkedList List接口的两个常见

Java数据结构-线性表之单链表LinkedList

线性表的链式存储结构,也称之为链式表,链表:链表的存储单元可以连续也可以不连续. 链表中的节点包含数据域和指针域,数据域为存储数据元素信息的域,指针域为存储直接后继位置(一般称为指针)的域. 注意一个头结点和头指针的区别: 头指针: 指向链表的第一个节点的指针,若链表有头结点,则是指向头结点的指针: 头指针具有标识作用,所以常用头指针作为链表的名字: 不论链表是否为空,头指针都不为空: 是链表的必要元素. 头结点: 头结点是为了操作的统一和方便而设立的,放在第一个元素节点的前面,其数据域一般无意

集合线性表--List之LinkedList(队列与栈)

队列和栈1. Queue 队列(Queue)是常用的数据结构,可以将队列看成特殊的线性表,队列限制了对线性表的访问方式:只能从线性表的一端添加(offer)元素,从另一端取出(poll)元素.队列遵循先进先出(FIFO First Input First Output )的原则.JDK中提供了Queue接口,同时使得LinkedList实现了该接口(选择LinkedList实现Queue的原因在于Queue经常要进行插入和删除的操作,而LinkedList在这方面效率较高).Queue提供了操作

数据结构笔记01:线性表之顺序存储结构(ArrayList)

一般使用数组(C语言中的数组采用顺序存储方式.即连续地址存储)来描述. 优点:在于随机访问元素. 缺点:插入和和删除的时候,需要移动大量的元素. c语言实现代码:ArrayList 1 // Test.cpp : Defines the entry point for the console application. 2 // 3 4 #include "stdafx.h" 5 #include <stdio.h> 6 #include "stdlib.h&quo

Java数据结构-线性表之顺序表ArrayList

线性表的顺序存储结构,也称为顺序表,指用一段连续的存储单元依次存储线性表中的数据元素. 根据顺序表的特性,我们用数组来实现顺序表,下面是我通过数组实现的Java版本的顺序表. package com.phn.datestructure; /** * @author 潘海南 * @Email [email protected] * @TODO 顺序表 * @date 2015年7月16日 */ public class FOArrayList<E> { // 顺序表长度 private int

[笔记]python数据结构之线性表:linkedlist链表,stack栈,queue队列

python数据结构之线性表 python内置了很多高级数据结构,list,dict,tuple,string,set等,在使用的时候十分舒心.但是,如果从一个初学者的角度利用python学习数据结构时,这些高级的数据结构可能给我们以迷惑. 比如,使用list实现queue的时候,入队操作append()时间复杂度可以认为是O(1),但是,出队操作pop(0)的时间复杂度就是O(n). 如果是想利用python学学数据结构的话,我觉得还是自己实现一遍基本的数据结构为好. 1.链表 在这里,我想使

大话数据结构---顺序存储结构的线性表

线性表的定义:零个或多个数据元素的有限序列. 定义的解读: 首先是由一组数据元素组成,可以基本数据类型,也可以使自定义的类型, 有限的个数,当然可以是0个,也就是空表呗, 还有一个特点就是有序 这么一看线性表抽象出来就和生活中的排队一样,一群小朋友站成一队,每个人都知道自己站在第几个,自己的前面是谁,后面谁,除了排头排位的两个数据,每个数据都有唯一的前驱和后继. 线性表的分类 今天先学习一下顺序存储结构,顺序存储结构指的就是用一段地址连续的存储单元依次存储线性表的数据元素: 这么一看线性表挺像数

集合操作--线性表

1.ArrayList和LinkedList List接口是Collection的子接口,用于定义线性表数据结构. 可以将List理解为存放对象的数组,只不过其元素个数可以动态的增加或减少. List接口的两个常见实现类为ArrayList和LinkedList,分别用动态数组和链表的方式实现了List接口 可以认为ArrayList和LinkedList的方法在逻辑上完全一样,只是在性能上有一定的差别. ArrayList更适合于随机访问而LinkedList更适合于插入和删除. 在性能要求不