为什么array(string[]) 的速度比别的都要快呢,想不明白,说好的时间复制度,在这里怎么感觉不对,不知道哪里理解出错了.
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Collections; 6 using System.Diagnostics; 7 8 namespace ConsoleApplication1 9 { 10 class Program 11 { 12 static void Main(string[] args) 13 { 14 Stopwatch sw=new Stopwatch (); 15 16 17 #region 18 sw.Restart(); 19 LinkedList<string> ll = new LinkedList<string>(); 20 for (int i = 0; i < 50000; i++) 21 { 22 ll.AddLast("sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss"); 23 } 24 int sdf = ll.Count; 25 string d = null; 26 for (int i = 0; i < sdf; i++) 27 { 28 d = ll.First(); 29 ll.RemoveFirst(); 30 } 31 sw.Stop(); 32 Console.WriteLine( sw.Elapsed.Ticks.ToString()+"--LinkedList"); 33 #endregion 34 35 #region 36 sw.Restart(); 37 Queue q = new Queue(); 38 39 for (int i = 0; i < 50000; i++) 40 { 41 q.Enqueue("sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss"); 42 } 43 int qCount= q.Count; 44 string s = null; 45 object o = null; 46 for (int i = 0; i < qCount; i++) 47 { 48 s = (string)q.Dequeue(); 49 //o = q.Dequeue(); 50 } 51 sw.Stop(); 52 Console.WriteLine(sw.Elapsed.Ticks.ToString() + "--Queue:"); 53 54 #endregion 55 56 #region 57 sw.Restart(); 58 string[] arr = new string[50000]; 59 60 61 //Queue q = new Queue(); 62 int ddd = 50000; 63 for (int i = 0; i < ddd; i++) 64 { 65 arr[i] = "sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss"; 66 } 67 68 //int qCount = q.Count; 69 //string s = null; 70 object o3 = null; 71 for (int i = 0; i < qCount; i++) 72 { 73 o3 = arr[i]; 74 //o = q.Dequeue(); 75 } 76 sw.Stop(); 77 Console.WriteLine(sw.Elapsed.Ticks.ToString()+"--array:"); 78 79 #endregion 80 81 #region 82 sw.Restart(); 83 IList<string> ls = new List<string>(); 84 85 //Queue q = new Queue(); 86 87 for (int i = 0; i < 50000; i++) 88 { 89 ls.Add( "sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss"); 90 } 91 92 //int qCount = q.Count; 93 //string s = null; 94 95 int lsLen =ls.Count(); 96 object o4 = null; 97 for (int i = 0; i < lsLen; i++) 98 { 99 o4 = ls[i]; 100 //o = q.Dequeue(); 101 } 102 sw.Stop(); 103 Console.WriteLine(sw.Elapsed.Ticks.ToString() + "--List"); 104 105 #endregion 106 107 Console.ReadKey(); 108 Console.ReadLine(); 109 110 111 } 112 } 113 }
时间复制度是个什么东西?是时间复杂度把?想知道你这个问题答案,去吧你这个例子里所有调用的方法看下是怎么实现的就知道了。
链表:
添加或者删除,最后一个或者最前一个
链表的时间复制度不是O(1)么,
虽然每个对象占用内存多,也应该很快啊;
-------------
数组:
要使用索引定位到某一个对象,才能对其操作.
O(n)
@我是猴子: 你往里面添加的是一个引用,而不是具体的值,占用内存并不多的。
重要的是你掉用的那些方法执行了什么操作。你自己反编译看一下