ArrayList是在System.Collections命名空间的一个类, 通过Add的方法添加一个项, 当进到这个类的元数据时, 可以看到这个方法的参数是一个object

public virtual int Add(object value)

所以在添加一个项时需要进行一次装箱的操作, 读取一个数据时需要一个拆箱的操作, 所以用ArrayList必然影响性能, 特别是项较多的时候进行读写, 至少要进行一次的装箱一次拆箱, 所花的时候也应该是更多

List<T>通过Add方法添加一个项是通过直接的类型来添加 public void Add(T item) 所以不需要再进行装箱与拆箱, 可以节省部分时间, 看下面的代码测试:

代码

using System;
using System.Diagnostics;
using System.Collections;
using System.Collections.Generic;
using System.Text;

namespace ConsoleTest
{
    class Program
    {
        static void Main(string[] args)
        {
            //ArrayList
            Stopwatch sw = new Stopwatch();
            sw.Start();
            ArrayList List1 = new ArrayList();
            for (int i = 0; i < 10000; i++)
            {
                List1.Add(i);
            }
            Console.WriteLine("Add item done.");
            foreach (int item in List1)
            {
 
            }
            Console.WriteLine("Foreach item done.");
            sw.Stop();
            Console.WriteLine("ArrayList is need time:" + sw.ElapsedMilliseconds.ToString());

//List<int>
            sw.Reset();
            List<int> List2 = new List<int>();
            for (int i = 0; i < 10000; i++)
            {
                List2.Add(i);
            }
            Console.WriteLine("Add item done.");
            foreach (int item in List2)
            {

}
            Console.WriteLine("Foreach item done.");
            sw.Stop();
            Console.WriteLine("List<int> is need time:" + sw.ElapsedMilliseconds.ToString());
            Console.ReadLine();
        }
    }
}

当你运行看结果时你就知道相差的结果了, 所以在代码当中, 尽量使用List<int>来代替ArrayList

ArrayList与List<T>笔记的更多相关文章

  1. ArrayList源码分析笔记

    ArrayList源码分析笔记 先贴出ArrayList一些属性 public class ArrayList<E> extends AbstractList<E> imple ...

  2. ArrayList源码阅读笔记(基于JDk1.8)

    关键常量: private static final int DEFAULT_CAPACITY = 10; 当没有其他参数影响数组大小时的默认数组大小 private static final Obj ...

  3. ArrayList源码阅读笔记(1.8)

    目录 ArrayList类的注解阅读 ArrayList类的定义 属性的定义 ArrayList构造器 核心方法 普通方法 迭代器(iterator&ListIterator)实现 最后声明 ...

  4. ArrayList源码解读笔记

    简介: ArrayList是我们开发中非常常用的数据存储容器之一,其底层是数组实现的,我们可以在集合中存储任意类型的数据,ArrayList是线程不安全的,非常适合用于对元素进行查找,效率非常高. 线 ...

  5. ArrayList源码分析笔记(jdk1.8)

    1.特点: ArrayList 是一个动态数组,它是线程不安全的,允许元素为null 可重复,插入有序 读写快,增删慢 扩容:默认容量 10,默认扩容1.5倍 建议指定容量大小,减少扩容带来的性能消耗 ...

  6. ArrayList底层代码解析笔记

    通过底层代码可以学习到很多东西: public class ArrayList<E> extends AbstractList<E> implements List<E& ...

  7. ArrayList源码阅读笔记

    ArrayList ArrayList继承自AbstractList抽象类,实现了RandomAccess, Cloneable, java.io.Serializable接口,其中RandomAcc ...

  8. Java基础学习笔记总结

    Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...

  9. jdk源码阅读笔记-LinkedHashMap

    Map是Java collection framework 中重要的组成部分,特别是HashMap是在我们在日常的开发的过程中使用的最多的一个集合.但是遗憾的是,存放在HashMap中元素都是无序的, ...

随机推荐

  1. luogu P2184 贪婪大陆

    乍一不咋会 ╭(╯3╰)╮ 把地雷L到R看成一条线段 要求的就是区间内有多少条线段经过 很明显是要用[1,R]内的起点个数-[1,L-1]的终点个数 然后这起点和终点个数可以用简单的差分线段树来维护一 ...

  2. 委托的begininvoke

    http://blog.csdn.net/cml2030/article/details/2172854 http://blog.163.com/weizhiyong_111/blog/static/ ...

  3. 51nod 1183 编辑距离

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1183. 题意不再赘述. 分析:大概和LCS差不多的吧   但是我用LCS ...

  4. HDU 6156 Palindrome Function

    http://acm.hdu.edu.cn/showproblem.php?pid=6156 题意:$f(n,k)$表示判断n在k进制下是否是回文串,如果是,则返回k,如果不是,则返回1.现在要计算$ ...

  5. Web API过滤器

    Web API包含在操作方法执行之前或之后添加额外的逻辑的过滤器.过滤器可用于提供横切特性,比如日志记录.异常处理.性能测量.身份验证和授权等等. 过滤器可以应用于Web API控制器或一个或多个操作 ...

  6. 测试报告 之 testNG + Velocity 编写自定义html测试报告

    之前用testNG自带的test-outputemailable-report.html,做出的UI自动化测试报告,页面不太好看. 在网上找到一个新的报告编写,自己尝试了一下,埋了一些坑,修改了输出时 ...

  7. python2 安装scrapy出现错误提示解决办法~

    首先:set STATICBUILD=true && pip install lxml 安装环境: windows7操作系统,已经正确安装python,pip. 使用pip功能安装Sc ...

  8. 页面资源缓存 html css js

    html <meta http-equiv="Expires" content="0"><meta http-equiv="Prag ...

  9. Python - configParser模块学习

    configParser 模块用于操作配置文件 注:Parser汉译为“解析”之意. 配置文件的格式与windows ini文件类似,可以包含一个或多个节(section),每个节可以有多个参数(键= ...

  10. js 数组的删除

    var test=[1,2,1,2,3,4,5,6,7]; 1.remove test.remove(1)     位置 test.remove(-2) test.remove(2,3) 2 dele ...