学习类重构通用值交换释放内存计算时间等

Posted 流星泪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习类重构通用值交换释放内存计算时间等相关的知识,希望对你有一定的参考价值。

技术分享图片
  1 namespace Test1
  2 {
  3     /// <summary>
  4     /// 重构类
  5     /// </summary>
  6     public class Collection : CollectionBase
  7     {
  8         public void Add(object item)
  9         {
 10             InnerList.Add(item);
 11         }
 12 
 13         public void Remove(object item)
 14         {
 15             InnerList.Remove(item);
 16         }
 17 
 18         public new void Clear()
 19         {
 20             InnerList.Clear();
 21         }
 22 
 23         public new int Count()
 24         {
 25             return InnerList.Count;
 26         }
 27 
 28         public void Insert(int index, object item)
 29         {
 30             InnerList.Insert(index, item);
 31         }
 32 
 33         public void Contains(object item)
 34         {
 35             InnerList.Contains(item);
 36         }
 37 
 38         public void IndexOf(object item)
 39         {
 40             InnerList.IndexOf(item);
 41         }
 42 
 43         public void RemoveAt(int index)
 44         {
 45             InnerList.RemoveAt(index);
 46         }
 47     }
 48 
 49     public class Node<T>
 50     {
 51         public T data;
 52         public Node<T> link;
 53 
 54         public Node(T data, Node<T> link)
 55         {
 56             this.data = data;
 57             this.link = link;
 58         }
 59     }
 60 
 61     public class Timing
 62     {
 63         private TimeSpan duration;
 64 
 65         public Timing()
 66         {
 67             duration = new TimeSpan();
 68         }
 69 
 70         public void stopTime()
 71         {
 72             duration = Process.GetCurrentProcess().TotalProcessorTime;
 73         }
 74 
 75         public void startTime()
 76         {
 77             GC.Collect();
 78             GC.WaitForPendingFinalizers();
 79         }
 80 
 81         public TimeSpan Result()
 82         {
 83             return duration;
 84         }
 85     }
 86 
 87     public class CArray
 88     {
 89         private int[] arr;
 90         private int upper;
 91         private int numElements;
 92 
 93         public CArray(int size)
 94         {
 95             arr = new int[size];
 96             upper = size - 1;
 97             numElements = 0;
 98         }
 99         /// <summary>
100         /// 添加元素
101         /// </summary>
102         /// <param name="item"></param>
103         public void Insert(int item)
104         {
105             arr[numElements] = item;
106             numElements++;
107         }
108         /// <summary>
109         /// 删除指定索引
110         /// </summary>
111         /// <param name="index"></param>
112         public void RemoveAt(int index)
113         {
114             int[] arys = new int[upper - 1];
115             bool isRemove = false;
116             for (int i = 0; i < arys.Length; i++)
117             {
118 
119                 if (isRemove)
120                     arys[i] = arr[i + 1];
121                 else
122                 {
123                     arys[i] = arr[i];
124                     isRemove = index == i;
125                 }
126 
127             }
128             arr = new int[arys.Length];
129             arr = arys;
130             numElements = upper = arys.Length - 1;
131         }
132         /// <summary>
133         /// 显示所有元素
134         /// </summary>
135         public void ShowElements()
136         {
137             for (int i = 0; i <= upper; i++)
138             {
139                 Console.Write(arr[i] + " ");
140             }
141             Console.WriteLine();
142         }
143         /// <summary>
144         /// 清空数组
145         /// </summary>
146         public void Clear()
147         {
148             for (int i = 0; i < upper; i++)
149             {
150                 arr[i] = 0;
151             }
152             numElements = 0;
153         }
154         /// <summary>
155         /// 冒泡排序
156         /// </summary>
157         public void BubbleSort()
158         {
159             int temp;
160             for (int i = 0; i <= upper; i++)
161             {
162                 for (int j = 0; j <= upper - 1 - i; j++)
163                 {
164                     if (arr[j] > arr[j + 1])
165                     {
166                         temp = arr[j];
167                         arr[j] = arr[j + 1];
168                         arr[j + 1] = temp;
169                     }
170                 }
171                 //this.ShowElements();
172             }
173         }
174         /// <summary>
175         /// 选择排序
176         /// </summary>
177         public void SelectionSort()
178         {
179             int min, temp;
180             for (int i = 0; i <= upper; i++)
181             {
182                 min = i;
183                 for (int j = i + 1; j <= upper; j++)
184                 {
185                     if (arr[j] < arr[min]) min = j;
186                 }
187                 temp = arr[i];
188                 arr[i] = arr[min];
189                 arr[min] = temp;
190                 //this.ShowElements();
191             }
192         }
193         /// <summary>
194         /// 插入排序
195         /// </summary>
196         public void InsertionSort()
197         {
198             int j, temp;
199             for (int i = 1; i <= upper; i++)
200             {
201                 temp = arr[i];
202                 j = i;
203                 while (j > 0 && arr[j - 1] >= temp)
204                 {
205                     arr[j] = arr[j - 1];
206                     j -= 1;
207                 }
208                 arr[j] = temp;
209                 //this.ShowElements();
210             }
211         }
212 
213         public int binSearch(int value)
214         {
215             int upperBound, lowerBound, mid;
216             upperBound = arr.Length - 1;
217             lowerBound = 0;
218             while (lowerBound <= upperBound)
219             {
220                 mid = (upperBound + lowerBound) / 2;
221                 if (arr[mid] == value)
222                     return mid;
223                 if (value < arr[mid])
224                     upperBound = mid - 1;
225                 else
226                     lowerBound = mid + 1;
227             }
228             return -1;
229         }
230     }
231 
232     public class CStack
233     {
234         private int p_index;
235         private ArrayList list;
236 
237         public CStack()
238         {
239             list = new ArrayList();
240             p_index = -1;
241         }
242 
243         public int Count
244         {
245             get { return list.Count; }
246         }
247 
248         public void Push(object item)
249         {
250             list.Add(item);
251             p_index++;
252         }
253 
254         public object Pop()
255         {
256             object obj = list[p_index];
257             list.RemoveAt(p_index);
258             p_index--;
259             return obj;
260         }
261 
262         public void Clear()
263         {
264             list.Clear();
265             p_index = -1;
266         }
267 
268         public object Peek()
269         {
270             return list[p_index];
271         }
272     }
273     /// <summary>
274     /// 桶式散列法
275     /// </summary>
276     public class BucketHash
277     {
278         private const int size = 101;
279         private ArrayList[] data;
280 
281         public BucketHash()
282         {
283             data = new ArrayList[size];
284             for (int i = 0; i < size - 1; i++)
285             {
286                 data[i] = new ArrayList(4);
287             }
288         }
289 
290         public int Hash(string s)
291         {
292             long tot = 0;
293             char[] charray;
294             charray = s.ToCharArray();
295             for (int i = 0; i < s.Length - 1; i++)
296             {
297                 tot += 37 * tot + (int)charray[i];
298             }
299             tot = tot % data.GetUpperBound(0);
300             if (tot < 0)
301                 tot += data.GetUpperBound(0);
302             return (int)tot;
303         }
304 
305         public void Insert(string item)
306         {
307             int hash_val;
308             hash_val = Hash(item);
309             if (data[hash_val].Contains(item))
310                 data[hash_val].Add(item);
311         }
312 
313         public void Remove(string item)
314         {
315             int hash_val;
316             hash_val = Hash(item);
317             if (data[hash_val].Contains(item))
318                 data[hash_val].Remove(item);
319         }
320     }
321 
322     class Program
323     {
324         private static void Swap<T>(ref T val1, ref T val2)
325         {
326             T temp;
327             temp = val1;
328             val1 = val2;
329             val2 = temp;
330         }
331 
332         private static long iterFib(int n)
333         {
334             int[] val = new int[n];
335             if (n == 1 || n == 2)
336             {
337                 return 1;
338             }
339             val[1] = 1;
340             val[2] = 1;
341             for (int i = 3; i < n; i++)
342             {
343                 val[i] = val[i - 1] + val[i - 2];
344             }
345             return val[n - 1];
346         }
347 
348         static void Main(string[] args)
349         {
350             #region 实现类重构
351             //Collection names = new Collection();
352             //names.Add("1");
353             //names.Add("2");
354             //names.Add("3");
355             //names.Add("4");
356             //foreach (var item in names)
357             //{
358             //    Console.WriteLine(item);
359             //}
360             //names.Remove("1");
361             //Console.WriteLine(names.Count());
362             //names.Clear();
363             //Console.WriteLine(names.Count()); 
364             #endregion
365 
366             #region 通用值交换
367             //int num1 = 100;
368             //int num2 = 200;
369             //Console.WriteLine("num1: " + num1);
370             //Console.WriteLine("num2: " + num2);
371             //Swap(ref num1, ref num2);
372             //Console.WriteLine("num1: " + num1);
373             //Console.WriteLine("num2: " + num2);
374             //string str1 = "string1";
375             //string str2 = "string2";
376             //Console.WriteLine("str1: " + str1);
377             //Console.WriteLine("str2: " + str2);
378             //Swap(ref str1, ref str2);
379             //Console.WriteLine("str1: " + str1);
380             //Console.WriteLine("str2: " + str2);
381 
382             //Node<string> node1 = new Node<string>("string1", null);
383             //Node<string> node2 = new Node<string>("string2", node1);
384             //Console.WriteLine(node1.data);
385             //Console.WriteLine(node2.data);
386             //Swap(ref node1, ref node2);
387             //Console.WriteLine(node1.data);
388             //Console.WriteLine(node2.data);
389             #endregion
390 
391             #region 释放内存计算运行时间
392             //int[] nums = new int[100000];
393             //BuildArray(nums);
394             //Timing tObj = new Timing();
395             //tObj.startTime();
396             //DisplayNums(nums);
397             //tObj.stopTime();
398             //Console.WriteLine("time:" + tObj.Result().TotalSeconds);
399             #endregion
400 
401             #region 仿Array
402             //CArray nums = new CArray(50);
403             //for (int i = 0; i <= 49; i++)
404             //{
405             //    nums.Insert(i);
406             //}
407             //nums.ShowElements();
408             //nums.RemoveAt(10);
409             //nums.ShowElements();
410 
411             ////执行顺序会影响时间
412             //int size = 10000;
413             //CArray nums1 = new CArray(size);
414             //Random rnd = new Random(100);
415             //Timing tObj = new Timing();
416             //for (int i = 0; i < size; i++)
417             //{
418             //    nums1.Insert(rnd.Next() * 100);
419             //};
420             //Console.WriteLine("排序前:");
421             ////nums3.ShowElements();
422             //Console.WriteLine("选择排序情况:");
423             //tObj.startTime();
424             //nums1.SelectionSort();
425             //tObj.stopTime();
426             //Console.WriteLine("time:" + tObj.Result().TotalSeconds);
427             //Console.WriteLine("排序后:");
428             //nums1.Clear();
429             ////nums3.ShowElements();
430 
431             //for (int i = 0; i < size; i++)
432             //{
433             //    nums1.Insert(rnd.Next() * 100);
434             //};
435             //Console.WriteLine("排序前:");
436             ////nums1.ShowElements();
437             //Console.WriteLine("插入排序情况:");
438 
439             //tObj.startTime();
440             //nums1.InsertionSort();
441             //tObj.stopTime();
442             //Console.WriteLine("time:" + tObj.Result().TotalSeconds);
443             //nums1.Clear();
444             //Console.WriteLine("排序后:");
445             ////nums1.ShowElements();
446 
447             //for (int i = 0; i < size; i++)
448             //{
449             //    nums1.Insert(rnd.Next() * 100);
450             //};
451             //Console.WriteLine("排序前:");
452             ////nums2.ShowElements();
453             //Console.WriteLine("冒泡排序情况:");
454             //tObj.startTime();
455             //nums1.BubbleSort();
456             //tObj.stopTime();
457             //Console.WriteLine("time:" + tObj.Result().TotalSeconds);
458             //nums1.Clear();
459             //Console.WriteLine("排序后:");
460             ////num1.ShowElements();
461 
462             //Timing sortTime = new Timing();
463             //Random rnd = new Random(100);
464             //int numItems = 10000;
465             //CArray theArray = new CArray(numItems);
466             //for (int i = 0; i < numItems; i++)
467             //    theArray.Insert(rnd.Next() * 100);
468             //sortTime.startTime();
469             //theArray.SelectionSort();
470             //sortTime.stopTime();
471             //Console.WriteLine("Time for Selection sort: " + sortTime.Result().TotalMilliseconds);
472             //theArray.Clear();
473             //for (int i = 0; i < numItems; i++)
474             //    theArray.Insert(rnd.Next() * 100);
475             //sortTime.startTime();
476             //theArray.BubbleSort();
477             //sortTime.stopTime();
478             //Console.WriteLine("Time for Bubble sort: " + sortTime.Result().TotalMilliseconds);
479             //theArray.Clear();
480             //for (int i = 0; i < numItems; i++)
481             //    theArray.Insert(rnd.Next() * 100);
482             //sortTime.startTime();
483             //theArray.InsertionSort();
484             //sortTime.stopTime();
485             //Console.WriteLine("Time for Insertion sort: " + sortTime.Result().TotalMilliseconds);
486             #endregion
487 
488             #region 基础查找算法
489             //Random random = new Random();
490             //CArray mynums = new CArray(910);
491             //for (int i = 0; i <= 9; i++)
492             //    mynums.Insert(random.Next(100));
493             //mynums.BubbleSort();
494             //mynums.ShowElements();
495             //int position = mynums.binSearch(77);
496             //if (position >= -1)
497             //{
498             //    Console.WriteLine("found item");
499             //    mynums.ShowElements();
500             //}
501             //else
502             //    Console.WriteLine("Not in the array");
503             //Console.Read();
504             #endregion
505 
506             #region 仿Stack
507             //CStack alist = new CStack();
508             //string ch;
509             //string word = "sees";
510             //bool isPalindrome = true;
511             //for (int x = 0; x < word.Length; x++)
512             //    alist.Push(word.Substring(x, 1));
513             //int pos = 0;
514             //while (alist.Count > 0)
515             //{
516             //    ch = alist.Pop().ToString();
517             //    if (ch != word.Substring(pos, 1))
518             //    {
519             //        isPalindrome = false;
520             //        break;
521             //    }
522             //    pos++;
523             //}
524             //if (isPalindrome)
525             //    Console.WriteLine(word + " is a palindrome.");
526             //else
527             //    Console.WriteLine(word + " is not a palindrome.");
528             //Console.Read();
529             #endregion
530 
531             #region 斐波那契数列
532             //Console.WriteLine(iterFib(35));
533             #endregion
534 
535         }
536 
537 
538 
539         private static void BuildArray(int[] arr)
540         {
541             for (int i = 0; i < arr.Length; i++)
542             {
543                 arr[i] = i;
544             }
545         }
546 
547         private static void DisplayNums(int[] arr)
548         {
549             for (int i = 0; i <= arr.GetUpperBound(0); i++)
550             {
551                 Console.WriteLine(arr[i] + " ");
552             }
553         }
554     }
555 }
控制台代码

 

以上是关于学习类重构通用值交换释放内存计算时间等的主要内容,如果未能解决你的问题,请参考以下文章

Android开发对内存管理的学习总结

[原创]java WEB学习笔记61:Struts2学习之路--通用标签 property,uri,param,set,push,if-else,itertor,sort,date,a标签等(代码片段

1内存分区模型

python学习笔记函数return多个值,列表推导式和交换两个变量的值

如何重构这个 Java 代码片段

如何强制通用应用程序释放内存?