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

话不多说,直接看示例代码

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类在各方面没有突出的性能,且此类已不提倡使用了。

总结

以上就是本文的全部内容,希望对大家学习或者使用Java能有所帮助。如果有疑问可以留言讨论。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
, 数组
, list
, java数组和list区别
数组和list性能
java数组转list、java list数组、java将数组转换成list、java int数组转list、java json数组转list,以便于您获取更多的相关知识。

时间: 2024-09-21 15:28:43

比较Java数组和各种List的性能小结_java的相关文章

Java数组模拟优先级队列数据结构的实例_java

优先级队列如果我们给每个元素都分配一个数字来标记其优先级,不妨设较小的数字具有较高的优先级,这样我们就可以在一个集合中访问优先级最高的元素并对其进行查找和删除操作了.这样,我们就引入了优先级队列 这种数据结构. 优先级队列(priority queue) 是0个或多个元素的集合,每个元素都有一个优先权,对优先级队列执行的操作有(1)查找(2)插入一个新元素 (3)删除 一般情况下,查找操作用来搜索优先权最大的元素,删除操作用来删除该元素 .对于优先权相同的元素,可按先进先出次序处理或按任意优先权

Java数组声明、创建、初始化基础_java

一维数组的声明方式: type var[]; 或type[] var; 声明数组时不能指定其长度(数组中元素的个数), Java中使用关键字new创建数组对象,格式为: 数组名 = new 数组元素的类型 [数组元素的个数] 实例: TestNew.java: 程序代码: public class TestNew { public static void main(String args[]) { int[] s ; int i ; s = new int[5] ; for(i = 0 ; i

从内存方面解释Java中String与StringBuilder的性能差异_java

以前经常在网上看到关于Java字符串拼接等方面的讨论.看到有些Java开发人员在给新手程序员的建议中类似如下写道: 不要使用+号拼接字符串,要使用StringBuffer或StringBuilder的append()方法来拼接字符串. 不过,用+号拼接字符串就真的那么令人讨厌,难道使用+号拼接字符串就没有一点可取之处吗? 通过查阅Java API文档中关于String类的部分内容,我们可以看到如下片段: "Java 语言提供对字符串串联符号("+")以及将其他对象转换为字符串

Java中的vector类使用示例小结_java

基本操作示例 VectorApp.java import java.util.Vector; import java.lang.*; import java.util.Enumeration; public class VectorApp { public static void main(String args[]) { Vector v1 = new Vector(); Integer integer1= new Integer(1); //加入为字符串对象 v1.addElement("o

Java实现获取客户端真实IP方法小结_java

在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了.如果使用了反向代理软件,用request.getRemoteAddr()方法获取的IP地址是:127.0.0.1或192.168.1.110,而并不是客户端的真实IP. 经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的 IP,服务器端应用也无法直接通过转发请

JAVA中字符串函数subString的用法小结_java

String str;str=str.substring(int beginIndex);截取掉str从首字母起长度为beginIndex的字符串,将剩余字符串赋值给str: str=str.substring(int beginIndex,int endIndex);截取str中从beginIndex开始至endIndex结束时的字符串,并将其赋值给str; demo: 复制代码 代码如下: class Test { public static void main(String[] args)

java 数组 效率-请大神帮我纠错!Java数组的问题

问题描述 请大神帮我纠错!Java数组的问题 给一个int 数组A[],和一个X,已知A中各元素是升序排列,要求返回X在A中的位置.A可能狂大,注意性能.class Solution { int solution(int[] A int X) {if (A == null) return -1; int N = A.length; if (N == 0) { return -1; } int l = 0; int r = N - 1; while (l < r) { int m = (l + r

关于JAVA 数组的使用介绍_java

JAVA数组与容器类主要有三方面的区别:效率.类型和保存基本类型的能力.在JAVA中,数组是一种效率最高的存储和随机访问对象引用序列的方式.数组就是一个简单的线性数列,这使得元素访问非常快速.但是为此付出的代价却是数组的大小被固定,并且在其生命周期中不可改变. 由于范型和自动包装机制的出现,容器已经可以与数组几乎一样方便地用于基本类型中了.数组和容器都可以一定程度上防止你滥用他们,如果越界,就会得到RuntimeException异常.数组硕果仅存的优势便是效率,然而,如果要解决更一般化的问题,

Java数组转换为List如何避免意外

现在将一个Java数组转换为List.可以使用Arrays.toList方法,但是使用几乎肯定会产生令人讨厌的意外. package com.wordpress.mlangc.arrays; import java.util.Arrays; public class ArraysToList {     public static void main(final String[] args)     {         System.out.println(                 Ar