在使用ArrayList这样的非泛型集合的过程当中,要进行装箱和拆箱操做,会有比较大的性能损失,而使用泛型集合就没有这样的问题。List是泛型,而ArrayList是非泛型。存数据岛ArrayList都须要专程object,读取又要转换成相应的数据类型,List则不须要。
//用来记录开始和结束的时间
DateTime startTime = new DateTime();
DateTime endTime = new DateTime();
//定义集合类型ArrayList的一个实例
ArrayList list = new ArrayList();
//取得当前时间
startTime = DateTime.Now;
//★★★★★★★★①使用ArrayList类★★★★★★★★
//ArrayList的add方法的参数是Object型,
//当咱们把int型做为参数传入的时候须要作装箱操做
//装箱操做将值类型转化为Object类型
for (int i = 0; i < 1000000; i++)
{
list.Add(i);
}
int iCount = 0;
//当咱们使用int型的时候须要作拆箱操做操做
//拆箱操做将应用类型转化为Object类型,拆箱过程要作大量的工做
foreach (int i in list)
{
iCount += 1;
}
Console.WriteLine("使用ArrayList的结果 : {0}", iCount.ToString());
//取得结束时间并计算差值
endTime = DateTime.Now;
TimeSpan ts = endTime - startTime;
Console.WriteLine("使用ArrayList的耗时 :" + ts.TotalMilliseconds);
//★★★★★★★★②使用泛型类★★★★★★★★
//使用List的泛型定义List<T>,int类型在编译器动态生成的类中本替换为int型
//执行过程当中再也不执行装箱拆箱操做
List<int> list2 = new List<int>();
startTime = DateTime.Now;
for (int i = 0; i < 1000000; i++)
{
list2.Add(i);
}
iCount = 0;
foreach (int i in list2)
{
iCount += 1;
}
Console.WriteLine("使用泛型的结果 : {0}", iCount.ToString());
endTime = DateTime.Now;
ts = endTime - startTime;
Console.WriteLine("使用泛型的耗时 :" + ts.TotalMilliseconds);
//显示三次结果以下
/* 第一次
* 使用ArrayList的耗时 :92
* 使用泛型的耗时 :25
*
* 第二次
* 使用ArrayList的耗时 :96
* 使用泛型的耗时 :22
*
* 第三次
* 使用ArrayList的耗时 :90
* 使用泛型的耗时 :22
*
* 由此能够明显看出二者的差异
* 这里仅仅是时间上的,并不包括对内存消耗的统计
*
* ※可是也要注意到差异的单位是毫秒,
* 我这里只想说明用泛型是有好处的,
* 但也不可过度追求程序的孰优孰劣,
* 总之要把握好这个度,适合本身的才是最好的
* O(∩_∩)O~
*/
Console.Read();java
java编程中咱们用最多的几个类能够就是String,ArrayList,HashMap了.特别是ArrayList咱们几乎无人不知,甚至有乱用的嫌疑了咱们来看看ArrayList和LinkedList的区别.故名思意ArrayList是数组表,LinkedList是连接表.ArrayList的全部数据是在同一个地址上,而LinkedList的每一个数据都拥有本身的地址.
咱们来比较一下经常使用的数据的插入,数据的删除,数据的更新,数据查询.
数据插入 :好比在i节点插入一个新数据
ArrayList:循环到i节点,插入一个新数据,而后把i节点后面的全部的数据的index加1. ->操做多
LinkedList:循环到i节点,把前一个节点的后续连接到新数据,而后把新数据连接到后一个数据就能够了. ->操做少
结论:平均效率LinkedList要好.
数据删除 :好比删除i节点数据
ArrayList:循环到i节点,而后把i节点后面的全部的数据的index减1. ->操做多
LinkedList:循环到i节点,把前一个节点的后续连接到i节点的后一个数据就能够了. ->操做少
结论:平均效率LinkedList要好.
数据查询 :好比查询i节点数据
ArrayList:循环到i节点. ->操做少
LinkedList:循环到i节点. ->操做少,但因为每一个数据的地址不同,查询好比 ArrayList慢.
结论:平均效率 ArrayList要好.
数据更新 :好比更新i节点数据
ArrayList:循环到i节点,把数据更新. ->操做少
LinkedList:循环到i节点,把前数据更新. ->操做少,但因为查询速度没有 ArrayList好,全部效率没有 ArrayList好.
结论:平均效率ArrayList要好.
这样咱们就能够看到各有优势.
若是查询操做较多ArrayList的效果更好.若是删除,插入较多LinkedList的效果较好.具体怎么用还看具体的需求.编程
以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索int , 数据 , arraylist , 效率 , 类型 时间 arraylist linkedlist、linkedarraylist、linkedlist、java linkedlist、linkedlist线程安全,以便于您获取更多的相关知识。数组