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

一、list简介

List列表类,顺序存储任何对象(顺序不变),可重复。
List是继承于Collection的接口,不能实例化。实例化可以用:
    ArrayList(实现动态数组),查询快(随意访问或顺序访问),增删慢。整体清空快,线程不同步(非线程安全)。数组长度是可变的百分之五十延长
    LinkedList(实现链表),查询慢,增删快。
    Vector(实现动态数组),都慢,被ArrayList替代。长度任意延长。线程安全(同步的类,函数都是synchronized)
    Stack(实现堆栈)继承于Vector,先进后出。

所以,快速访问ArrayList,快速增删LinkedList,单线程都可以用,多线程只能用同步类Vector

list基本操作
    插入:add()
    查找:get()
    删除:remove(int index)
    修改:set()
    清空表:clear()
    遍历:用Iterator迭代器遍历每个元素,如
List al = new ArrayList();
Iterator it = al.iterator()
while (it.hasNext())
{
    System.out.println(it.next().toString());
}
此外,其他函数
    boolean add(int index, E element)
    boolean addAll(index,Collection)

二、ArrayList和LinkedList的效率比较

2.1 原理
    顺序存储是将数据元素存放于一个连续的存储空间中,实现顺序存取或(按下标)直接存取。存储效率高,速度快。但空间大小一经定义,在程序整个运行期间不会发生改变,因此,不易扩充。同时,由于在插入或删除时,为保持原有次序(没有规定元素进栈顺序),平均需要移动一半(或近一半)元素,修改效率不高。

    链接存储表示的存储空间一般在程序的运行过程中动态分配和释放,且只要存储器中还有空间,就不会产生存储溢出的问题。同时在插入和删除时不需要保持数据元素原来的物理顺序,只需要保持原来的逻辑顺序,因此不必移动数据,只需修改它们的链接指针,修改效率较高。但存取表中的数据元素时,只能循链顺序访问,因此存取效率不高。
2.2 代码测试
package test;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class ListTest {

    public static void main(String[] args) {
        List<String> LList = new LinkedList<String> ();
        List<String> AList = new ArrayList<String> ();

        long startTime = System.currentTimeMillis();
        for(int i=0;i<10000;i++)
        {
            LList.add(""+i);
        }
        long endTime = System.currentTimeMillis();
        long result = endTime - startTime;
        System.out.println("linkedlist:"+result);

        startTime = System.currentTimeMillis();
        for(int i=0;i<10000;i++)
        {
            AList.add(""+i);
        }
        endTime = System.currentTimeMillis();
        result = endTime - startTime;
        System.out.println("arraylist:"+result);
    }

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

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

//方法一 速度最快

System.currentTimeMillis();

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

new Date().getTime();

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

Calendar.getInstance().getTimeInMillis();

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

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

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

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

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

bool是LongBool类型. Delphi中定义了四种布尔类型:Boolean,ByteBool,WordBool和LongBool.后面三种布尔类型是为了与其他语言兼容而引入的,一般情况下建议使用Boolean类型. 这四种类型的布尔值占用内存的数量如下: Boolean 1 Byte ByteBool 1 Byte WordBool 2 Bytes(1 Word) LongBool 4 Bytes(2 Words) 对于ByteBool,WordBool和LongBool三种类型True

nginx反代httpd,实现三种tomcat代理模型至后端的tomcat服务器,会话绑定的三种方式

构建tomcat集群,实现前端一台nginx反代,到后端的apache服务器,由apache负责向后端的tomcat服务器进行资源调度,这样的模式比直接用nginx反代到后端主机,tomcat服务器所受到的压力会更小,服务将会更加稳定,这样的模式是经过实践检验出来的.如果nginx直接调度到后端tomcat服务器,则只支持http和https,而不支持ajp,http与https模式的设定,可以让外来客户直接访问tomcat服务器,而不需要经过我们设置好的前端nginx的端口,这样是十分不安全的

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

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.List集合 List集合代表一个元素有序.客重复的集合,集合中每个元素都有其对应的顺序索引.List 集合允许使用重复元素,可以通过索引来访问指定位置的集合元素.List集合默认按元素的添加 顺序设置元素的索引,例如第一次添加的元素索引为0,第二次添加的元素索引为1...... 1.List接口和ListIterator接口 List作为Collection接口的子接口,所以可以使用Co

如何让html的某个元素隐藏,我们一般有三种方式:display:none, opacity:0, visibility:hidden。但这三种方式有何区别?

1. display:none 该方式让元素隐藏时,隐藏的元素不占空间,隐藏后将改变html原有样式.一旦父节点元素应用了display:none,父节点及其子孙节点元素全部不可见,而且无论其子孙元素如何不屈地挣扎都无济于事. 2. visibility:hidden 该方式让元素隐藏时,隐藏的元素还是占用原有位置,隐藏后不将改变html原有样式.但,如果该元素的子元素使用了visibility:visible的话,改子元素将不被隐藏. 3. opacity:0 该方式让元素隐藏时,隐藏的元素还

C++回顾 统计词频问题 -- vector、map、hash_map(三种方式时间比较)

本博文我们通过三个程序比较统计词频问题的时间复杂度问题: 问题描述; 1).找一篇文章,将所有单词输入至程序:(The Bible Holy为例) 2).统计出每个单词的数量,即词频问题: 3).增加停用词功能:(遇到此类词,直接略过)(网上搜) 4).分别统计出读取文件并计算词频时间.排序所用时间: 5).用 类 实现各函数(处统计时间的函数除外). vector.map.hash_map 都要处理字符串的 去除标点符号.将大写字母转换成小写字母.不对数字进行统计 问题.因此,我们可以将处理这

获取时间戳的三种方式

console.log(new Date().getTime()); console.log(new Date().valueOf()); console.log(+new Date()); console.log(Date.now()); 原文地址:https://www.cnblogs.com/ustc-yy/p/12074499.html

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

public class PerformanceTester { public static final int TIMES=100000; public static abstract class Tester{ private String operation; public Tester(String operation){this.operation=operation;} public abstract void test(List<String> list); public Str

java数组初始化的三种方式

  //第一种 int[] is= new int[3]; is[0]=1; is[1]=2; is[2]=3; //第二种 int[] is2= {1,2,3}; //第三种 int[] is3= new int[]{1,2,3}; //我个人比较喜欢第三种方式,比较容易阅读,并且用起来代码不啰嗦,重要的是看起来比较顺眼..

Java 处理 XML 的三种主流技术及介绍

简介: XML (eXtensible Markup Language) 意为可扩展标记语言,它已经是软件开发行业中大多数程序员和厂商用以选择作为数据传输的载体.本文作者对于 Java 处理 XML 的几种主流技术进行一些总结和介绍,希望帮助那些有不同需求的开发人员对于 XML 处理技术的作出最优的选择. 最初,XML 语言仅仅是意图用来作为 HTML 语言的替代品而出现的,但是随着该语言的不断发展和完善,人们越来越发现它所具有的优点:例如标记语言可扩展,严格的语法规定,可使用有意义的标记,内容