`

java -> 数组 , List , 性能 分析

    博客分类:
  • java
 
阅读更多

******

ArrayList 的 底层是 Array 

*********

ArrayList是以数组的形式存放数据的,性能和数组应该是差不多。它读取的性能比LinkedList快,但是添加的性能不如LinkedList
LinkedList是以链表的形式存储数据的,它添加的性能比ArrayList快,读取的性能不如ArrayList

 

''''''

 

From: http://www.cnblogs.com/vijozsoft/p/5813693.html

 

以下程序分别对Java数组、ArrayList、LinkedList和Vector进行随机访问和迭代等操作,并比较这种集合的性能。

 

package cn.lion.test;
public class PerformanceTest {
         
         privatestatic final int SIZE =100000;
         publicstatic abstract class Test{
                   privateString operation;
                   publicTest(String operation){
                            this.operation= operation;
                   }
                   publicabstract void test(List<String> list);
                   publicString getOperation(){
                            returnoperation;
                   }
         }
         //执行迭代操作的匿名类
         staticTest iterateTest = new Test("iterate"){
                   publicvoid test(List<String> list){
                            for(inti=0; i<10; i++){
                                     Iterator<String>it = list.iterator();
                                     while(it.hasNext()){
                                               it.next();
                                     }
                            }
                   }
         };
         //执行随机访问的匿名类
         staticTest getTest = new Test("get"){
                   publicvoid test(List<String> list){
                            for(inti=0; i<list.size(); i++){
                                     for(intk=0; k<10; k++){
                                               list.get(k);
                                     }
                            }
                   }
         };
         //执行插入的匿名类
         staticTest insertTest = new Test("insert"){
                   publicvoid test(List<String> list){
                            ListIterator<String>it = list.listIterator(list.size()/2);
                            for(inti=0; i<SIZE; i++){
                                     it.add("lion");
                            }
                   }
         };
         //执行删除的匿名类
         staticTest removeTest = new Test("remove"){
                   publicvoid test(List<String> list){
                            ListIterator<String>it = list.listIterator();
                            while(it.hasNext()){
                                     it.next();
                                     it.remove();
                            }
                   }
         };
         staticpublic void testArray(List<String> list){
                   Test[]tests = {iterateTest, getTest};
                   test(tests,list);
         }
         staticpublic void testList(List<String> list){
                   Test[]tests = {insertTest, iterateTest, getTest, removeTest};
                   test(tests,list);
         }
         staticpublic void test(Test[] tests, List<String> list){
                   for(inti=0; i<tests.length; i++){
                            System.out.print(tests[i].getOperation()+ "操作:");
                            longt1 = System.currentTimeMillis();
                            tests[i].test(list);
                            longt2 = System.currentTimeMillis();
                            System.out.print(t2-t1+ "ms");
                            System.out.println();
                   }
         }
         publicstatic void main(String[] args){
                   
                   List<String>list = null;
                   //测试数组的迭代和随机访问操作
                   System.out.println("------测试数组------");
                   String[]tstr = new String[SIZE];
                   Arrays.fill(tstr,"lion");
                   list= Arrays.asList(tstr);
                   testArray(list);
                   
                   tstr= new String[SIZE/2];
                   Collection<String>coll = Arrays.asList(tstr);
                   
                   //测试Vector
                   System.out.println("------测试Vector------");
                   list= new Vector<String>();
                   list.addAll(coll);
                   testList(list);
                   
                   //测试LinkedList
                   System.out.println("------测试LinkedList------");
                   list= new LinkedList<String>();
                   list.addAll(coll);
                   testList(list);
                   
                   //测试ArrayList
                   System.out.println("------测试Vector------");
                   list= new ArrayList<String>();
                   list.addAll(coll);
                   testList(list);
         }
}

 

   程序运行结果如图



 

从结果可以看出,对数组进行随机访问和迭代操作的速度是最快的;对LinkedList进行插入和删除操作的速度是最快的;对ArrayList进行随机访问的速度也很快;Vector类在各方面没有突出的性能,且此类已不提倡使用了。

 

再 重申 :

 

转至 : http://www.cnblogs.com/vijozsoft/p/5813693.html

 

 

 

 

 

 

 

  • 大小: 29 KB
分享到:
评论

相关推荐

    java高端技术课程--Java数组如何实现复制

    可以将数组转换为List,然后使用List的copy()方法,如ArrayList的copy(),进行复制。这种方法适用于对象数组的深拷贝,因为集合框架中的copy()方法实现了深拷贝。 7. **自定义复制方法** 当需要进行特定的复制...

    Java 实例 - 删除数组元素源代码-详细教程.zip

    本详细教程将指导你如何实现这一功能,帮助你深入理解Java数组操作。 首先,我们需要明白Java中的数组不直接支持删除元素操作。不像其他一些编程语言(如Python或JavaScript)中的数组,Java数组一旦创建,其长度是...

    Java 实例 - 数组反转源代码-详细教程.zip

    List&lt;String&gt; list = new ArrayList&lt;&gt;(Arrays.asList(array)); Collections.reverse(list); // 将反转后的列表转换回数组 array = list.toArray(new String[0]); // 输出反转后的数组 for (String s : array...

    List<Long>转一维数组 Long[](csdn)————程序.pdf

    在标题和描述中提到的"List&lt;Long&gt;转一维数组 Long[]",就是将一个包含Long类型的列表转换为对应的Long数组。这里我们将详细探讨如何进行这种转换,并了解相关的编程概念。 首先,让我们看下给定的代码片段: ```...

    java实现二维数组转json的方法示例

    例如,使用Gson库,你可以创建一个`Blog`类来表示博客信息,然后将二维数组转换为`List&lt;Blog&gt;`,再使用Gson的`toJson`方法生成JSON字符串: ```java import com.google.gson.Gson; public class Blog { private ...

    java 数组的合并

    ArrayList&lt;Integer&gt; list = new ArrayList&lt;&gt;(); for (int i : array1) { list.add(i); } for (int i : array2) { list.add(i); } int[] mergedArray = list.stream().mapToInt(Integer::intValue).toArray()...

    java 动态的数组链表

    在Java编程语言中,动态数组链表是一种常见的数据结构,它结合了数组和链表的特点,既能快速访问数组中的元素,又能方便地进行插入和删除操作。本文将深入探讨Java中实现动态数组链表的关键概念、操作以及其实现方式...

    Java随机产生数组元素并无重复元素方法

    return IntStream.generate(() -&gt; min + new Random().nextInt(max - min + 1)) .distinct() .limit(length) .toArray(); } public static void main(String[] args) { int[] array = generateUniqueRandom...

    list转换成string数组

    在Java编程语言中,经常需要将`List&lt;String&gt;`类型的数据转换为`String[]`数组类型,以便于进行某些特定的操作或适应某些方法的要求。本文将详细探讨这一转换过程,并通过几个具体的示例来帮助理解。 #### 一、基础...

    用Java动态数组扩充实现线性表

    `ListInterface.java`可能定义了一个接口,描述了线性表应具备的基本操作,如`add()`, `remove()`, `get()`, `size()`等。 理解动态数组实现的线性表对于编程和数据结构的学习至关重要,它可以帮助我们更有效地管理...

    从n个数组中取出所有排列组合(Java实现)

    private static List&lt;List&lt;Integer&gt;&gt; findPermutations(List&lt;List&lt;Integer&gt;&gt; arrays, int index, List&lt;Integer&gt; current) { if (index == arrays.size()) { // 组合完成,添加到结果 return Collections....

    java 动态数组的体现

    在Java编程语言中,动态数组是一种能够自动调整其大小的数组,它允许我们在程序运行时增加或减少数组容量。这种特性使得动态数组成为处理不确定数量数据的高效工具。本篇文章将深入探讨Java中的动态数组实现,主要...

    比较Java数组和各种List的性能小结

    首先,Java数组是最基础的数据结构,它提供了固定大小的连续内存空间来存储相同类型的数据。由于其物理结构的特性,数组在随机访问时具有极高的效率,因为可以直接通过索引来访问元素。但是,插入和删除元素时,如果...

    javalist数据结构-Java数据结构-------List.pdf

    Java中的List接口是集合框架的重要组成部分,它定义了一组有序的元素序列,允许有重复的元素。ArrayList、Vector和LinkedList都是List接口的实现类,它们各自具有不同的特性和使用场景。 1. ArrayList: ArrayList...

    Java 中删除数组中所有出现的元素.docx

    list.removeIf(i -&gt; i == key); return list.stream().mapToInt(Integer::intValue).toArray(); } ``` 总的来说,根据具体情况,可以选择最合适的删除元素的方法。基础的 `Arrays.copyOf` 方法简单直接,适用于...

    在Java中如何高效的判断数组中是否包含某个元素Java开

    在Java编程中,判断数组是否包含特定元素是常见的操作,特别是在处理数据集合时。高效地完成这项任务可以显著提升程序的性能。以下是一些在Java中判断数组是否包含某个元素的关键知识点,以及如何优化这个过程。 1....

    java从n个数组中取出所有的组合

    在Java编程中,"从n个数组中取出所有的组合"是一个经典的算法问题,涉及到排列组合的概念。这通常可以通过回溯法或递归策略来解决。下面我们将深入探讨这个主题。 首先,我们需要理解“排列”与“组合”的概念。...

    java基础--list(ArrayList、LinkedList、匿名类).docx

    【Java基础——List接口详解(ArrayList、LinkedList、匿名类)】 在Java编程中,List接口是集合框架的重要组成部分,提供了有序存储元素的功能。ArrayList和LinkedList是List接口的两种主要实现,它们各有优缺点,...

    java offer收割指南

    sql 语句的执行顺序是 from -&gt; where -&gt; group by -&gt; having -&gt; select -&gt; distinct -&gt; order by。 JVM 10. 什么情况下会发生栈内存溢出。 当栈中分配的对象大小超过栈的容量时,会发生栈内存溢出。 11. JVM 的...

    Java-Java集合体系-List-Set

    在Java中,集合主要分为三大接口:List、Set和Map。这些接口各有特点,适用于不同的应用场景。 一、List接口 List接口是单列集合的子接口,它允许存储重复的元素,并且元素具有顺序性。List接口提供了丰富的操作...

Global site tag (gtag.js) - Google Analytics