一: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. pycharm中操作git

    pycharm操作git 1.找到VCS 2.

  2. ApacheCN JavaScript 译文集 20211122 更新

    JavaScript 编程精解 中文第三版 零.前言 一.值,类型和运算符 二.程序结构 三.函数 四.数据结构:对象和数组 五.高阶函数 六.对象的秘密 七.项目:机器人 八.Bug 和错误 九.正 ...

  3. Zookeeper应用场景汇总(超详细)

    Zookeeper典型应用场景汇总 数据发布与订阅(配置中心) 发布与订阅模型,即所谓的配置中心,顾名思义就是发布者将数据发布到ZK节点上,供订阅者动态获取数据,实现配置信息的集中式管理和动态更新.例 ...

  4. Tomcat多实例单应用部署方案 (转)

    一.Tomcat部署的场景分析 通常,我们对tomcat部署需求可以分为几种:单实例单应用,单实例多应用,多实例单应用,多实例多应用. 对于第一种场景,如果不要求周期性地维护tomcat版本,一般的做 ...

  5. Eclipse 堆栈和内存大小设置(转载)

    1,  设置Eclipse内存使用情况 修改eclipse根目录下的eclipse.ini文件 -vmargs  //虚拟机设置 -Xms40m -Xmx256m -XX:PermSize=128M ...

  6. 简单实现支付密码输入框 By HL

    密码输入框在微信,支付宝中比较常见 主要功能点 1.6位(或者N位)密码输入框封装

  7. Dockerfile镜像实例

    Dockerfile镜像实例 目录 Dockerfile镜像实例 一.构建SSH镜像 1. 建立工作目录 2. 生成镜像 3. 启动容器并修改root密码 二.systemctl镜像 1. 建立工作目 ...

  8. ubuntu中codeblocks设置代码黑色主题配色

    说明 网上资料较杂乱,特整理以备留用和他人参阅. 配置文件下载 首先下载配置文件,命名为default.conf. 配置文件 官方配置文件网址 将配置文件替换ubuntu如下路径内的default.c ...

  9. Byobu安装与使用

    机子为Ubuntu18 Byobu安装 sudo apt-get install byobu Byobu安装后默认禁用,需要启用Byobu,之后每次登陆自动启用Byobu byobu-enable 还 ...

  10. Linux源码编译安装php7.2

    以下简单的介绍下如何源码安装PHP,对于版本不一定是7.2,也可以是7.3,当然方法都是换汤不换药的,核心东西不变. 一.下载PHP源码 需要到指定的路径下载源码,执行下面的命令 wget http: ...