ArrayList,LinkedList, Vector, Stack的区别
来源:互联网 发布:秋瓷炫身世 知乎 编辑:程序博客网 时间:2024/06/08 06:36
List的框架图
List
|---- LinkList
|---- ArrayList
|---- Vector
|---- Stack
List是一个接口,它继承于Collection的接口。它代表着有序的队列。
ArrayList,LinkedList, Vector, Stack是List的4个实现类。
ArrayList:一个数组队列,相当于动态数组。它由数组实现,随机访问效率高,随机插入、删除效率低。
LinkedList:一个双向链表。它也可以被当作堆栈、队列或双端队列进行操作。随机访问效率低,但随机插入、随机删除效率低。
Vector:矢量队列,和ArrayList一样,它也是一个动态数组。但是ArrayList是非线程安全的,而Vector是线程安全的。
Stack:它继承于Vector。它的特性是:先进后出(FILO, FirstIn Last Out)。
List使用场景
如果涉及到“栈”、“队列”、“链表”等操作,应该考虑用List,具体的选择哪个List,根据下面的标准来取舍。
1、对于需要快速插入,删除元素,应该使用LinkedList。
2、对于需要快速随机访问元素,应该使用ArrayList。
3、对于“单线程环境” 或者“多线程环境,但List仅仅只会被单个线程操作”,此时应该使用非同步的类(如ArrayList)。
对于“多线程环境,且List可能同时被多个线程操作”,此时,应该使用同步的类(如Vector)。
下面是自己用C语言写的单链表,实现了基本的添加元素,删除元素,遍历元素的功能。 注释非常详细,有点数据结构和C基础的一定能看懂。
<span style="font-family:FangSong_GB2312;font-size:18px;">/* * LinkList.c * * Created on: 2011-11-2 * Author: du_minchao */#include <stdlib.h>#include "IDVRealise.h"#include "BaseLinkList.h"int main(){//建立空表,初始化头指针, head ->next = NULL;LinkList head = (LinkList)malloc(sizeof(LNode));head->next = NULL;LinkList L = head;insertList(L,1,5);insertList(L,1,4);insertList(L,1,3);insertList(L,1,2);insertList(L,1,1);printList(L);delList(L,1);delList(L,5); //由于没有第5个元素,所有删除失败, 提示位置不合适printList(L);return 0;}</span>
<span style="font-family:FangSong_GB2312;font-size:18px;">/* * IDVRealise.h * * Created on: 2011-11-2 * Author: du_minchao */#ifndef IDVREALISE_H_#define IDVREALISE_H_#include <stdio.h>#include <stdlib.h>#define DataType inttypedef struct LNode{DataType data;struct LNode *next;}LNode, *LinkList;//查找L中得第i个元素, 并返回其指针LinkList findList(LinkList L, int i){LinkList p ;int j=0;p = L;//p指向头结点,这样可以找到第i个元素while(p && j<i){p = p->next;++j;}if(!p){printf("链表中没有第%d个元素\n", i);return NULL;}return p;}//在头指针链表L第I个位置插入元素evoid insertList(LinkList L, int i, DataType e){//1.首先找到链表中的第i-1个元素LinkList p = findList(L,i-1);if(!p){printf("你插入的位置无效!\n");return;}//2.将元素e插入到链表中LinkList s = (LinkList)malloc(sizeof(LNode));s->data = e;s->next = p->next;p->next = s;printf("你已经插入元素%d。\n", s->data);return ;}//删除L中的第I个元素void delList(LinkList L, int i){LinkList s=NULL;//1.先找到第i-1个元素LinkList p = findList(L,i-1);//p指向第i-1个元素if(!p || !(p->next)){//如果第I个元素或者第i个元素为空, 则返回删除位置无效printf("你要删除的位置无效\n");return ;}//第i个位置不为空s = p->next;//s指向第i个元素p->next = s->next;//删除第i个元素//3.如果有效删除第i个元素。printf("你已经删除第%d个元素%d。\n",i,s->data);free(s);return ;}#endif /* IDVREALISE_H_ */</span>
<span style="font-family:FangSong_GB2312;font-size:18px;">/* * BaseLinkList.h * * Created on: 2011-11-3 * Author: du_minchao */#ifndef BASELINKLIST_H_#define BASELINKLIST_H_#include <stdio.h>//对线性表进行初始化void initList(LinkList L){}void getElem(LinkList L, int i, DataType e){}//遍历打印链表中的所有元素void printList(LinkList L){LinkList p = L->next; //p指向第一个元素while(p){printf("%d ",p->data);p = p->next;}puts("");return;}#endif /* BASELINKLIST_H_ */</span>
- ArrayList,LinkedList,Vector,Stack之间的区别
- ArrayList,LinkedList, Vector, Stack的区别
- ArrayList、LinkedList、Vector、Stack的区别
- ArrayList,LinkedList,Vector,Stack之间的区别
- ArrayList,LinkedList,Vector,Stack之间的区别
- List以及arrayList,linkedlist,vector,以及stack的区别
- ArrayList,LinkedList,Vector的区别
- LinkedList ArrayList Vector的区别
- Vector,ArrayList, Linkedlist的区别
- Arraylist,LinkedList,vector的区别
- ArrayList、LinkedList、Vector的区别
- ArrayList,Vector,LinkedList的区别
- ArrayList LinkedList Vector的区别
- ArrayList、LinkedList、Vector的区别
- ArrayList、LinkedList、Vector的区别
- ArrayList,LinkedList,Vector的区别
- ArrayList,LinkedList,Vector的区别
- ArrayList、LinkedList、Vector的区别
- 模拟退火算法(SA)
- 遗传算法(GA)
- Generate Parentheses
- WdatePicker判断后一个日期比前一个大
- Linux中tty、pty、pts的概念区别
- ArrayList,LinkedList, Vector, Stack的区别
- 软件测试经典面试题
- SpringMvc后台传递Map到前台并解析
- iOS开发 —— Objective C语言知识点总结(2)
- Spark 1.5中数据科学的进展
- Android开发如何去除标题栏title
- sublime产生多行游标的4种方式
- jquery validate错误显示位置
- Android开发之实现拨号功能