• JAVA集合一:ArrayList和LinkedList


    JAVA集合一:ArrayList和LinkedList

    参考链接:

    HOW2J.CN

    前言

    这几篇博客重点记录JAVA的几个重要的集合框架:ArrayList、LinkedList、HashMap、HashTable和HashSet。主要从ArrayList和LinkedList、HashMap和HashTable的区别,以及各集合框架的使用等方面进行记录。本篇博客介绍ArrayList和LinkedList的使用和区别。

    ArrayList和LinkedList的区别和使用

    ArrayList实现了List接口,以下是它的主要方法:

    常用方法 用途
    add 在当前顺序表末尾插入一个元素
    insert 在当前顺序表中插入一个元素
    remove 删除指定元素
    indexOf 获取某个元素的下标
    size 获取顺序表的大小
    contains 判断是否存在某个元素
    get 获取指定下标的元素
    set 替换指定下标的元素
    clear 清除顺序表所有元素
    addAll 将另一个容器的所有元素添加进来
    toArray 将顺序表转化为数组

    LinkedList同样实现了List接口, add,remove,contains 等方法同样可以使用。除此之外,它还实现了Deque接口(双向链表)和Queue接口(队列),以下是它区别于ArrayList的特殊的方法:

    特殊方法 用途
    addLast 在末尾插入元素
    addFirst 在首部插入元素
    getFirst 获取首部元素
    getLast 获取尾部元素
    removeFirst 删除首部元素
    removeLast 删除尾部元素
    offer 元素进入队列尾部
    poll 从队列首部取出一个元素
    peek 查看队列第一个元素(不取出)

    ArrayList就是数据结构中学习的顺序表,查询方便,增删较慢

    LinkedList就是数据结构中学习的链表,查询较慢,增删很快

    以下是how2j网站对两种数据结构的示意图:

    在这里插入图片描述

    接下来我们用代码来展示两者的区别:

    //向ArrayList和LinkedList最前面添加10000个数据
    
    package blog;
    
    import java.util.ArrayList;
    import java.util.LinkedList;
    import java.util.List;
    
    public class Main {
        public static void main(String[] args) {
        	List<Integer> arr = new ArrayList<Integer>();//顺序表
        	List<Integer> link = new LinkedList<Integer>();//链表
        	insertFirst(arr, "顺序表");
        	insertFirst(link, "链表");
        }  
        
        //在线性表头部插入10000个数据,计算耗时
        public static void insertFirst(List list, String name) {
        	int num = 10000;
        	int data = 1;
        	long start = System.currentTimeMillis();//获取开始时间
        	for(int i = 0; i < num; i++) {
        		list.add(0,data);
        	}
        	long end = System.currentTimeMillis();//获取结束时间
        	System.out.format("在%s头部插入10000个数据,耗时 %d ms
    ", name,(end-start));
        }
    }
    

    运行结果如下(链表耗时更少,因为头部基本不需要定位,只需要增删):

    在顺序表头部插入10000个数据,耗时 15 ms
    在链表头部插入10000个数据,耗时 2 ms

    //ArrayList和LinkedList查询某个元素耗时
    package blog;
    
    import java.util.ArrayList;
    import java.util.LinkedList;
    import java.util.List;
    
    public class Main {
        public static void main(String[] args) {
        	List<Integer> arr = new ArrayList<Integer>();//顺序表
        	List<Integer> link = new LinkedList<Integer>();//链表
        	getIndex(arr, "顺序表", 500000);
        	getIndex(link, "链表", 500000);
        }  
        
        //在线性表获取第index位的数据,计算耗时
        public static void getIndex(List<Integer> list, String name, int index) {
        	int num = 1000000;  	
        	for(int i = 0; i < num; i++) {
        		list.add(i);
        	}
        	long start = System.currentTimeMillis();//获取开始时间
        	int target = list.get(index);//查询元素下标
        	long end = System.currentTimeMillis();//获取结束时间
        	System.out.format("在%s中寻找下标为  %d 的数据,耗时 %d ms
    ", name,target,(end-start));
        }
    }
    

    结果如下(当表中数据极大时,链表查询缓慢的多):

    在顺序表中寻找下标为 500000 的数据,耗时 0 ms
    在链表中寻找下标为 500000 的数据,耗时 5 ms

  • 相关阅读:
    爸爸妈妈儿子女儿吃水果问题以及五个哲学家吃饭问题
    同步与互斥中的购票和退票问题的PV操作与实现
    创建react&ts&antd项目
    在POM配置Maven plugin提示错误“Plugin execution not covered by lifecycle configuration”的解决方案
    aws rds 储存空间占用 异常排查 存储空间占满
    Linux下clang、gcc、intel编译器最新版本安装笔记
    extern "C"与extern "C" { … }的差别
    gcc预处理指令之#pragma once
    指向类的成员变量的指针
    Java程序中使用SQLite总结
  • 原文地址:https://www.cnblogs.com/theory/p/11884323.html
Copyright © 2020-2023  润新知