******
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
相关推荐
可以将数组转换为List,然后使用List的copy()方法,如ArrayList的copy(),进行复制。这种方法适用于对象数组的深拷贝,因为集合框架中的copy()方法实现了深拷贝。 7. **自定义复制方法** 当需要进行特定的复制...
本详细教程将指导你如何实现这一功能,帮助你深入理解Java数组操作。 首先,我们需要明白Java中的数组不直接支持删除元素操作。不像其他一些编程语言(如Python或JavaScript)中的数组,Java数组一旦创建,其长度是...
List<String> list = new ArrayList<>(Arrays.asList(array)); Collections.reverse(list); // 将反转后的列表转换回数组 array = list.toArray(new String[0]); // 输出反转后的数组 for (String s : array...
在标题和描述中提到的"List<Long>转一维数组 Long[]",就是将一个包含Long类型的列表转换为对应的Long数组。这里我们将详细探讨如何进行这种转换,并了解相关的编程概念。 首先,让我们看下给定的代码片段: ```...
例如,使用Gson库,你可以创建一个`Blog`类来表示博客信息,然后将二维数组转换为`List<Blog>`,再使用Gson的`toJson`方法生成JSON字符串: ```java import com.google.gson.Gson; public class Blog { private ...
ArrayList<Integer> list = new ArrayList<>(); for (int i : array1) { list.add(i); } for (int i : array2) { list.add(i); } int[] mergedArray = list.stream().mapToInt(Integer::intValue).toArray()...
在Java编程语言中,动态数组链表是一种常见的数据结构,它结合了数组和链表的特点,既能快速访问数组中的元素,又能方便地进行插入和删除操作。本文将深入探讨Java中实现动态数组链表的关键概念、操作以及其实现方式...
return IntStream.generate(() -> min + new Random().nextInt(max - min + 1)) .distinct() .limit(length) .toArray(); } public static void main(String[] args) { int[] array = generateUniqueRandom...
在Java编程语言中,经常需要将`List<String>`类型的数据转换为`String[]`数组类型,以便于进行某些特定的操作或适应某些方法的要求。本文将详细探讨这一转换过程,并通过几个具体的示例来帮助理解。 #### 一、基础...
`ListInterface.java`可能定义了一个接口,描述了线性表应具备的基本操作,如`add()`, `remove()`, `get()`, `size()`等。 理解动态数组实现的线性表对于编程和数据结构的学习至关重要,它可以帮助我们更有效地管理...
private static List<List<Integer>> findPermutations(List<List<Integer>> arrays, int index, List<Integer> current) { if (index == arrays.size()) { // 组合完成,添加到结果 return Collections....
在Java编程语言中,动态数组是一种能够自动调整其大小的数组,它允许我们在程序运行时增加或减少数组容量。这种特性使得动态数组成为处理不确定数量数据的高效工具。本篇文章将深入探讨Java中的动态数组实现,主要...
首先,Java数组是最基础的数据结构,它提供了固定大小的连续内存空间来存储相同类型的数据。由于其物理结构的特性,数组在随机访问时具有极高的效率,因为可以直接通过索引来访问元素。但是,插入和删除元素时,如果...
Java中的List接口是集合框架的重要组成部分,它定义了一组有序的元素序列,允许有重复的元素。ArrayList、Vector和LinkedList都是List接口的实现类,它们各自具有不同的特性和使用场景。 1. ArrayList: ArrayList...
list.removeIf(i -> i == key); return list.stream().mapToInt(Integer::intValue).toArray(); } ``` 总的来说,根据具体情况,可以选择最合适的删除元素的方法。基础的 `Arrays.copyOf` 方法简单直接,适用于...
在Java编程中,判断数组是否包含特定元素是常见的操作,特别是在处理数据集合时。高效地完成这项任务可以显著提升程序的性能。以下是一些在Java中判断数组是否包含某个元素的关键知识点,以及如何优化这个过程。 1....
在Java编程中,"从n个数组中取出所有的组合"是一个经典的算法问题,涉及到排列组合的概念。这通常可以通过回溯法或递归策略来解决。下面我们将深入探讨这个主题。 首先,我们需要理解“排列”与“组合”的概念。...
【Java基础——List接口详解(ArrayList、LinkedList、匿名类)】 在Java编程中,List接口是集合框架的重要组成部分,提供了有序存储元素的功能。ArrayList和LinkedList是List接口的两种主要实现,它们各有优缺点,...
sql 语句的执行顺序是 from -> where -> group by -> having -> select -> distinct -> order by。 JVM 10. 什么情况下会发生栈内存溢出。 当栈中分配的对象大小超过栈的容量时,会发生栈内存溢出。 11. JVM 的...
在Java中,集合主要分为三大接口:List、Set和Map。这些接口各有特点,适用于不同的应用场景。 一、List接口 List接口是单列集合的子接口,它允许存储重复的元素,并且元素具有顺序性。List接口提供了丰富的操作...