zoukankan      html  css  js  c++  java
  • List<T>Contains, Exists, Any之间的优缺点对比

    在List<T>中,Contains, Exists, Any都可以实现判断元素是否存在。

    性能方面:Contains 优于 Exists 优于 Any

       测试的代码:

    public static void Contains_Exists_Any_Test(int num)  
            {  
                List<int> list = new List<int>();  
      
                int N = num;  
                for (int i = 0; i < N; i++)  
                {  
                    list.Add(i);  
                }  
                System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();  
                sw.Start();  
                Console.WriteLine(list.Contains(N));  
                sw.Stop();  
                Console.WriteLine("Contains:"+sw.Elapsed.ToString());  
      
                sw.Start();  
                Console.WriteLine(list.Exists(i => i == N));  
                sw.Stop();  
                Console.WriteLine("Exists:"+ sw.Elapsed.ToString());  
      
                sw.Start();  
                Console.WriteLine(list.Any(i => i == N));  
                sw.Stop();  
                Console.WriteLine("Any:"+ sw.Elapsed.ToString());  
            }  
    

     在开发过程中可以根据实际情况进行选择,当list中数据量不大时使用Exists代码更简洁易懂;数据量大时推荐使用Contains;不推荐使用Any

    下面的代码对比就能看出为啥数据量不大的时候推荐Exists了。

    class ITEM_GIDComparer : IEqualityComparer<T>  
        {  
            public bool Equals(T orl1, T orl2)  
             {  
                 if (orl1==null)  
                 {  
                     return orl2 == null;  
                 }  
                 return orl1.ITEM_GID == orl2.ITEM_GID;  
             }  
      
            public int GetHashCode(T orl)  
             {  
                 if (orl == null)  
                     return 0;  
                 return orl.ITEM_GID.GetHashCode();  
             }   
        }  
        orlclst.Contains(orlc, new ITEM_GIDComparer())  
        //Exists一行代码就可以实现上面的功能  
        orlclst.Exists(x=>x.ITEM_GID==orlc.ITEM_GID) 
    
  • 相关阅读:
    Java finally语句到底是在return之前还是之后执行?
    RedirectAttributes
    ueditor的使用
    controller跳到另一个controller
    $.post()用法例子
    进入一个jsp直接跳到另一个jsp
    mybatis多表查询
    asp.net在网页上显示数据库中的数据
    asp.net全局记住值
    面向对象
  • 原文地址:https://www.cnblogs.com/sunliyuan/p/5971995.html
Copyright © 2011-2022 走看看