一、list简介

  1. List列表类,顺序存储任何对象(顺序不变),可重复。
  2. List是继承于Collection的接口,不能实例化。实例化可以用:
  3. ArrayList(实现动态数组),查询快(随意访问或顺序访问),增删慢。整体清空快,线程不同步(非线程安全)。数组长度是可变的百分之五十延长
  4. LinkedList(实现链表),查询慢,增删快。
  5. Vector(实现动态数组),都慢,被ArrayList替代。长度任意延长。线程安全(同步的类,函数都是synchronized
  6. Stack(实现堆栈)继承于Vector,先进后出。
  7. 所以,快速访问ArrayList,快速增删LinkedList,单线程都可以用,多线程只能用同步类Vector
  8. list基本操作
  9. 插入:add()
  10. 查找:get()
  11. 删除:remove(int index)
  12. 修改:set()
  13. 清空表:clear()
  14. 遍历:用Iterator迭代器遍历每个元素,如
  1. List al = new ArrayList();
  2. Iterator it = al.iterator()
  3. while (it.hasNext())
  4. {
  5. System.out.println(it.next().toString());
  6. }
  1. 此外,其他函数
  2. boolean add(int index, E element)
  3. boolean addAll(index,Collection)

二、ArrayList和LinkedList的效率比较

2.1 原理
  1. 顺序存储是将数据元素存放于一个连续的存储空间中,实现顺序存取或(按下标)直接存取。存储效率高,速度快。但空间大小一经定义,在程序整个运行期间不会发生改变,因此,不易扩充。同时,由于在插入或删除时,为保持原有次序(没有规定元素进栈顺序),平均需要移动一半(或近一半)元素,修改效率不高。
  2. 链接存储表示的存储空间一般在程序的运行过程中动态分配和释放,且只要存储器中还有空间,就不会产生存储溢出的问题。同时在插入和删除时不需要保持数据元素原来的物理顺序,只需要保持原来的逻辑顺序,因此不必移动数据,只需修改它们的链接指针,修改效率较高。但存取表中的数据元素时,只能循链顺序访问,因此存取效率不高。
2.2 代码测试
  1. package test;
  2. import java.util.ArrayList;
  3. import java.util.LinkedList;
  4. import java.util.List;
  5. public class ListTest {
  6. public static void main(String[] args) {
  7. List<String> LList = new LinkedList<String> ();
  8. List<String> AList = new ArrayList<String> ();
  9. long startTime = System.currentTimeMillis();
  10. for(int i=0;i<10000;i++)
  11. {
  12. LList.add(""+i);
  13. }
  14. long endTime = System.currentTimeMillis();
  15. long result = endTime - startTime;
  16. System.out.println("linkedlist:"+result);
  17. startTime = System.currentTimeMillis();
  18. for(int i=0;i<10000;i++)
  19. {
  20. AList.add(""+i);
  21. }
  22. endTime = System.currentTimeMillis();
  23. result = endTime - startTime;
  24. System.out.println("arraylist:"+result);
  25. }

结果发现速度上ArrayList 比LinkedList要快的多

这里用来获取时间戳(毫秒)来计算时间的方式用三种,

//方法一 速度最快

System.currentTimeMillis();

//方法二 比方法一慢,低于一倍的时间

new Date().getTime();

//方法三 速度最慢,Canlendar处理时区耗时

Calendar.getInstance().getTimeInMillis();

另外,文章http://blog.csdn.net/inkfish/article/details/5185320

提到了更多的list,以及性能比较,可以参看

  1. 结论:
  2.   1.随机插入、随机删除操作中,用TreeList 效率最高;
  3.   2.在只需要追加、迭代的环境下,LinkedList 效率最高;
  4.   3.平均效率来讲,ArrayList 相对平衡,但如果海量随机操作,还是会造成性能瓶颈;
  5.   4.CopyOnWriteArrayList 因为线程安全的原因,致使性能降低很多,所以慎用;
  6.   5.Vector 没有传说中那么低的效率;
  7.   6.Stack 来做List 的事可以,不过语义上Stack 不应该做过多的List 的事情;
  8.   7.在排序中,ArrayList 具有最好的性能,TreeList 平均性能也不错,LinkedList 的排序效率受元素初始状态的影响很大。
  9.   8.各种List 间转换几乎没有时间损耗。

java的list几种实现方式的效率(ArrayList、LinkedList、Vector、Stack),以及 java时间戳的三种获取方式比较的更多相关文章

  1. java 获取时间戳的三种方式

      java 获取时间戳的三种方式 CreationTime--2018年7月13日16点29分 Author:Marydon 1.实现方式 方式一:推荐使用 System.currentTimeMi ...

  2. js获取时间戳的三种方式

      js获取时间戳的三种方式 CreateTime--2018年5月23日08:44:10 Author:Marydon // 方式一:推荐使用 var timestamp=new Date().ge ...

  3. Delphi中定义了四种布尔类型:Boolean,ByteBool,WordBool和LongBool。后面三种布尔类型是为了与其他语言兼容而引入的

    bool是LongBool类型. Delphi中定义了四种布尔类型:Boolean,ByteBool,WordBool和LongBool.后面三种布尔类型是为了与其他语言兼容而引入的,一般情况下建议使 ...

  4. java:HTML(table表格,ul列表)和CSS(导入.css文件,三种定义颜色方式,三种样式选择器,a标签属性顺序,)

    1.重点掌握: html: 1.form表单:input,checkbox,seelct,radio,button,submit 2.table表格:thead-->tr-->th;tbo ...

  5. Java——(五)Collection之List集合、ArrayList和Vector实现类

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.List集合 List集合代表一个元素有序.客重复的集合,集合中每个元素都有其对应的顺序索引 ...

  6. java类集框架(ArrayList,LinkedList,Vector区别)

    主要分两个接口:collection和Map 主要分三类:集合(set).列表(List).映射(Map)1.集合:没有重复对象,没有特定排序方式2.列表:对象按索引位置排序,可以有重复对象3.映射: ...

  7. 比较Java数组,ArrayList,LinkedList,Vector 性能比较

    public class PerformanceTester { public static final int TIMES=100000; public static abstract class ...

  8. Java 集合的简单实现 (ArrayList & LinkedList & Queue & Stack)

    ArrayList 就是数组实现的啦,没什么好说的,如果数组不够了就扩容到原来的1.5倍 实现了迭代器 package com.wenr.collection; import java.io.Seri ...

  9. java 中 ArrayList LinkedList Vector 三者的异同点

    1.ArrayList和Vector都是基于数组实现的,所以查询速度很快,增加和删除(非最后一个节点)速度慢: Vector是线程安全的,ArrayList不是. 2.LinkedList 是一个双向 ...

随机推荐

  1. C#+HtmlAgilityPack+Dapper走一波爬虫

    最近因为公司业务需要,又有机会撸winform了,这次的需求是因为公司有项目申报的这块业务,项目申报前期需要关注政府发布的相关动态信息,政府部门网站过多,人工需要一个一个网站去浏览和查阅,有时候还会遗 ...

  2. 第四节基础篇 - SELECT 语句详解

    4.1 基本的SELECT语句 select * from T_WEATHER select cityname from t_weather 4.2 数学符号条件(>.<.>=.&l ...

  3. DCOM EXCE权限配置问题

    检索COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046}的组件时失败,原因是出现以下错误: 80070005: 关于以上这个问题,博主在百度上 ...

  4. windows server 2008 R2 禁用ipv6和隧道适配器

    在windows server 2008 R2操作系统下部署weblogic web application,部署完成后进行测试,发现测试页的地址使用的是隧道适配器的地址,而不是静态的ip地址,而且所 ...

  5. text-size-adjust: none并没有什么用

    在样式文件中添加text-size-adjust: none,并没有什么用,移动端浏览器自动调整字体大小还是在进行,webkit已取消对其支持,移动端避免浏览器因为横屏.竖屏模式自动缩放字体大小可以加 ...

  6. C# 虹软SDK视频人脸识别和注册

    一,准备工作 1.Afoge视频参数类 using AForge.Video.DirectShow; using System; using System.Collections.Generic; u ...

  7. 百度音乐flac 下载

    破解百度音乐白金会员 为了给Play Music上传标签齐全的正版的mp3,本屌翻遍网络苦思冥想.现在终于被我找到了破解之法——破解百度白金会员!破解之后可以直接从百度下载正版授权的320k文件,更可 ...

  8. Django 跨域请求处理

    参考https://blog.csdn.net/qq_27068845/article/details/73007155 http://blog.51cto.com/aaronsa/2071108 d ...

  9. 初识mybatis(二)

    上篇博客我们介绍通过Java代码来创建mybatis的配置文件,港真,这种方式看起来有意思实际在开发中用的并不多,mybatis的配置还是以xml配置为主,本文我们就来看看如何通过xml文件来配置my ...

  10. vue 2.0 scopedSlots和slots在render函数中的应用示例

    渲染内容为: hello from functional render scopedSlots render scopedSlots named slot of render hello from f ...