一:ArrayList和LinkedList的大致区别如下:

1.ArrayList是实现了基于动态数组的数据结构,ArrayList实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高

2.LinkedList基于链表的数据结构, 插入、删除元素时效率比较高  故:【插入、删除操作频繁时,可使用LinkedList来提高效率】

LinkedList提供对头部和尾部元素进行添加和删除操作的方法,插入/删除第一个和最后一个效率比较高;

3:ArrayList和LinkedList都是List接口的实现,都存储一组不唯一,有序(插入顺序)的对象, 对元素进行添加、删除等操作[ 即:List的性质]

4.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。

5.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

6:LinkedList比ArrayList更占内存

eg:(代码示例01)----ArrayList与LinkedLis的数据添加和查找耗时对比

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List; public class HFSD {
static final int N=50000; //添加5000条数据
static long timeList(List list){ //添加数据所需时间
long start=System.currentTimeMillis();
Object o = new Object();
for(int i=0;i<N;i++) {
list.add(0, o);
}
return System.currentTimeMillis()-start;
}
static long readList(List list){ //查找数据所需时间
long start=System.currentTimeMillis();
for(int i=0,j=list.size();i<j;i++){ }
return System.currentTimeMillis()-start;
} static List addList(List list){
Object o = new Object();
for(int i=0;i<N;i++) {
list.add(0, o);
}
return list;
}
public static void main(String[] args) {
System.out.println("ArrayList添加"+N+"条耗时:"+timeList(new ArrayList()));
System.out.println("LinkedList添加"+N+"条耗时:"+timeList(new LinkedList())); List list1=addList(new ArrayList<>());
List list2=addList(new LinkedList<>());
System.out.println("ArrayList查找"+N+"条耗时:"+readList(list1));
System.out.println("LinkedList查找"+N+"条耗时:"+readList(list2));
}

分别在ArrayList和LinkedList集合中添加5万条数据,测试运行结果如下:

从以上结果,我i们可以看出 ArrayList更适合读取数据,linkedList更多的时候添加或删除数据。

ArrayList:内部是使用可増长数组实现的,所以是用get和set方法是花费少数时间的,但是如果插入元素和删除元素,除非插入和删除的位置都在表末尾,否则代码开销会很大,因为里面需要数组的移动。
LinkedList:是使用双链表实现的,所以get会非常消耗资源,除非位置离头部很近。但是插入和删除元素花费少数时间。

二:ArrayList和LinkedList的共有方法(即List的方法):

eg:(代码示例02)----ArrayList代码示例

package JIhekuangjia006.ArrayList;

/**
* 小猪类
*/
public class Pig {
private String name;
private String sex; public Pig(String name,String sex){
this.name=name;
this.sex=sex;
}
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setSex(String sex){
this.sex=sex;
}
public String getSex(){
return sex;
}
}
package JIhekuangjia006.ArrayList;

import java.util.*;

/**
* 使用ArrayList集合进行操作数据
*/
public class Test1 {
public static void main(String[] args) {
//1.存储小猪信息
Pig xiaojia=new Pig("小佳","母");//索引为0
Pig xiaolong=new Pig("小龙","公");//索引为1
Pig jiajia=new Pig("佳佳","女");//索引为2
Pig longlong=new Pig("龙龙","男");//索引为3(与数组相同,从0开始) //为小猪排序
List list=new ArrayList();
//直接将元素添加排序
list.add(xiaojia);
list.add(jiajia);
list.add(xiaolong); //将龙龙添加到索引为2的位置
list.add(2,longlong); //list.add(jiajia);//List 接口存储一组不唯一,有序(插入顺序)的对象 //2.获得小猪的总数
//通过list.size()方法获取元素的个数
list.size();
System.out.println("小猪的总数为"+list.size()); //3.逐条打印小猪信息
//方法一:for循环与get()方法配合实现遍历
for(int i=0;i<list.size();i++){
Pig center=(Pig)list.get(i);//因为list.get()的返回值为Object的类型,所以需要强转为Pig的类型
System.out.println(center.getName()+","+center.getSex());
} //方法二:通过迭代器Iterator实现遍历
// Iterator it=list.iterator();
// while (it.hasNext()){
// Pig center=(Pig)it.next();
// System.out.println(center.getName()+","+center.getSex());
// } System.out.println("*********************************************************");
//4.删除小猪信息
//删除第一只小猪,小佳
list.remove(0);//与数组下标相对应
//删除指定小猪,小龙
list.remove(xiaolong);
//将剩下的小猪信息进行输出
System.out.println("删除之后还有"+list.size()+"只小猪,\n分别是:");
for(int i=0;i<list.size();i++){
/**
* Object get(int index)返回指定索引位置处的元素。取出的元素是Object类型,
* 使用前需要进行强制类型转换
*/
Pig center=(Pig)list.get(i);//所以需要强转为Pig的类型 System.out.println(center.getName()+","+center.getSex());
} System.out.println("*******************************************************");
//5.判断集合中是否包含指定小猪
if (list.contains(xiaojia)){//使用list.contains()方法进行判断
System.out.println("集合中有小佳");
}else{
System.out.println("集合中没有小佳");
}
}
}

测试运行结果如下:

三:LinkedList的特有方法:

eg:(代码示例03)----LinkedList代码示例:

package JIhekuangjia006.LinkedList;

/**
* 小猪类
*/
public class Pig {
private String name; //昵称
private String sex; //性别 public Pig(String name,String sex){
this.name=name;
this.sex=sex;
}
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setSex(String sex){
this.sex=sex;
}
public String getSex(){
return sex;
}
}
package JIhekuangjia006.LinkedList;

import java.util.Iterator;
import java.util.LinkedList; /**
* 使用LinkedList集合操作数据
*/
public class Test2 {
public static void main(String[] args) {
//1.存储小猪信息
Pig xiaojia=new Pig("小佳","母");//索引为0
Pig xiaolong=new Pig("小龙","公");//索引为1
Pig jiajia=new Pig("佳佳","女");//索引为2
Pig longlong=new Pig("龙龙","男");//索引为3(与数组相同,从0开始) //为小猪排序
LinkedList list=new LinkedList();
//直接将元素添加排序
list.add(xiaolong);
list.add(longlong);
list.addFirst(jiajia);//将佳佳添加到第一个位置
list.addLast(xiaojia);//将小龙添加到最后一个位置 //list.add(jiajia);//List 接口存储一组不唯一,有序(插入顺序)的对象 //2.获得小猪的总数
//通过list.size()方法获取元素的个数
list.size();
System.out.println("小猪的总数为"+list.size()); //3.逐条打印小猪的信息 //方法一:通过迭代器Iterator实现遍历
Iterator it=list.iterator();
while (it.hasNext()){
Pig center=(Pig)it.next();
System.out.println(center.getName()+","+center.getSex());
} //方法二:for循环与get()方法配合实现遍历
// for(int i=0;i<list.size();i++){
// Pig pig=(Pig)list.get(i);
// System.out.println(pig.getName()+","+pig.getSex());
// } System.out.println("************************************************"); //4.
//获取第一只小猪的信息
Pig center=(Pig)list.getFirst();
System.out.println("第一条狗狗信息是:"+center.getName()+","+center.getSex());
//获取最后一只小猪的信息
Pig center1=(Pig)list.getLast();
System.out.println("最后一条狗狗信息是:"+center1.getName()+","+center1.getSex()); System.out.println("*****************************************************"); //5.删除第一只小猪和最后一只小猪
list.removeFirst();
list.removeLast(); System.out.println("*****************************************************"); //6.输出剩下小猪的信息
System.out.println("剩下还有"+list.size()+"只小猪,\n分别是:");
for(int i=0;i<list.size();i++){
Pig pig=(Pig)list.get(i);
System.out.println(pig.getName()+","+pig.getSex());
}
//7.判断集合中是否存在小佳
if(list.contains(xiaojia)){
System.out.println("集合中存在小佳");
}else{
System.out.println("集合中不存在小佳");
}
}
}

测试运行结果如下:

Java中ArrayList和LinkedList的异同的更多相关文章

  1. Java中ArrayList与LinkedList的区别

    Java中ArrayList与LinkedList的区别 一般大家都知道ArrayList和LinkedList的区别: 1. ArrayList的实现是基于数组,LinkedList的实现是基于双向 ...

  2. Java中arraylist和linkedlist源代码分析与性能比較

    Java中arraylist和linkedlist源代码分析与性能比較 1,简单介绍 在java开发中比較经常使用的数据结构是arraylist和linkedlist,本文主要从源代码角度分析arra ...

  3. java中ArrayList 和 LinkedList 有什么区别

    转: java中ArrayList 和 LinkedList 有什么区别 ArrayList和LinkedList都实现了List接口,有以下的不同点:1.ArrayList是基于索引的数据接口,它的 ...

  4. Java中ArrayList和LinkedList差别

    一般大家都知道ArrayList和LinkedList的大致差别: 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构.  2.对于随机訪问get和set.A ...

  5. JAVA中ArrayList与LinkedList的区别以及对应List使用foreach与使用下标遍历的效率问题

    近期在做一个对接京东的电商平台,所以对各个地方的效率考虑的比较多,今天深挖了一下ArrayList与LinkedList的区别以及对应List使用foreach与使用下标遍历的效率问题,首先说一下两种 ...

  6. Java中ArrayList和LinkedList区别 时间复杂度 与空间复杂度

    一般大家都知道ArrayList和LinkedList的大致区别:      1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构.      2.对于随机访问 ...

  7. Java中ArrayList和LinkedList的性能分析

    ArrayList和LinkedList是Java集合框架中经常使用的类.如果你只知道从基本性能比较ArrayList和LinkedList,那么请仔细阅读这篇文章. ArrayList应该在需要更多 ...

  8. java中ArrayList、LinkedList、Vector的区别

    ArrayList.LinkedList.Vector这三个类都实现了List接口. ArrayList是一个可以处理变长数组的类型,可以存放任意类型的对象.ArrayList的所有方法都是默认在单一 ...

  9. Java中ArrayList和LinkedList区别

    ArrayList和LinkedList的大致区别如下:1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构. 2.对于随机访问get和set,ArrayLis ...

随机推荐

  1. python习题_读写csv格式的文件

    1.读写TXT文件 # *_* coding : UTF-8 *_* # 开发人员 : zfy # 开发时间 :2019/7/7 16:26 # 文件名 : lemon_10_file.PY # 开发 ...

  2. PostgreSQL逻辑订阅

    测试环境:PostgreSQL 13.2 1.逻辑订阅简介 由于物理复制只能做到这个集群的复制,不能正对某个对象(表)进行复制,且物理复制的备库只能读,不能写.相反,逻辑订阅同时支持主备库读写,且可以 ...

  3. JVM常用命令(九)

    前面东西说完后,现在可以说一些和我们平时进行性能调优相关的东西了,那怎么看和我们JVM性能调优相关的东西呢,其实这对我们开发来说是一个比较头痛的问题,其实我们JDK官网给了一些我们相关的指令,我们可以 ...

  4. hihoCoder挑战赛1 毁灭者问题

    题目链接:http://hihocoder.com/problemset/problem/1034 数据结构题,由于每个魔法单位有着不同的回复速度和上限,所以不能根据吸收时间点进行查询和更新.但是如果 ...

  5. php解决抢购秒杀抽奖等大流量并发入库导致的库存负数的问题

    我们知道数据库处理sql是一条条处理的,假设购买商品的流程是这样的: sql1:查询商品库存 1 if(库存数量 > 0) 2 { 3 //生成订单 4 //库存-1 5 > 当没有并发时 ...

  6. springCloud项目解决跨域问题

    通过 spring cloud gateway 实现, 方式一:选择在主启动类中注册 CorsWebFilter 类: /** * 1.允许cookies跨域 * 2.允许向该服务器提交请求的URI, ...

  7. 手把手教你实现pynq-z2条形码识别

    我是 雪天鱼,一名FPGA爱好者,研究方向是FPGA架构探索和SOC设计. 关注公众号,拉你进"IC设计交流群". 1.前言 单单实现一个二维码识别就花了将近一个星期,这篇文章我就 ...

  8. MindSpore多元自动微分

    技术背景 当前主流的深度学习框架,除了能够便捷高效的搭建机器学习的模型之外,其自动并行和自动微分等功能还为其他领域的科学计算带来了模式的变革.本文我们将探索如何用MindSpore去实现一个多维的自动 ...

  9. Solution -「CF 1586F」Defender of Childhood Dreams

    \(\mathcal{Description}\)   Link.   定义有向图 \(G=(V,E)\),\(|V|=n\),\(\lang u,v\rang \in E \Leftrightarr ...

  10. Spring Cloud之微服务注册到Eureka Server集群

    在Spring Cloud之服务注册中心搭建Eureka Server服务注册中⼼ - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中已经搭建好了Eureka Server集群,本文就利用 ...