测试判断List中是否有不同项的时间复杂度
功能:当集合中某一项不同于其它项时高亮(为空时不计入)
List长度为522万
1、stringBuilding+replace方法
2、Distinct+Count方法
3、Compare方法
数 时间 预期结果
全为5220 0.577 0.5 1.51 没有重复项
0.559 0.5 1.362
0.774 0.571 1.398
全为"" 0.09 0.295 0.091 没有重复项
0.083 0.283 0.084
0.086 0.277 0.082
某一个为5220 0.086 0.111 0.087 没有重复项
0.09 0.115 0.093
0.088 0.112 0.088
全部不一样 0.149 1.639 1.033 高亮
0.157 1.503 0.855
0.143 1.458 0.871
某两个不一样 0.092 0.184 0.099 高亮
0.086 0.111 0.085
0.085 0.108 0.082
改为1522万条不一样
时间复杂度:0.418 4.047 3.026
0.438 4.08 2.959
0.409 3.937 3.001
空间复杂度:72 268433372 48
72 268436896 -164
72 268379204 0
代码:
<%
var gaoliang = false;
List<string> testIntList = new List<string>();
for (var i = 0; i < 15220000; i++)
{
if (i == 5220 || i == 5116)
{
testIntList.Add(i.ToString());
}
else
{
testIntList.Add("");
}
}
System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
long start = GC.GetTotalMemory(true);
watch.Start();
var result = "没有重复项";
StringBuilder strTest = new StringBuilder();
String str = string.Empty;
foreach (var j in testIntList)
{
if (j + "" != "")
{
if (str + "" == "")
{
str = j;
}
if (str.Length != j.Length)
{
gaoliang = true;
}
else
{
strTest.Append(j);
}
}
}
if (strTest.Length > 0)
{
strTest = strTest.Replace(str, "");
}
if (strTest.Length > 0 || gaoliang)
{
result = "高亮";
}
watch.Stop();
GC.Collect();
GC.WaitForFullGCComplete();
long end = GC.GetTotalMemory(true);
long useMemory = end - start;
var useTime1 = (double)watch.ElapsedMilliseconds / 1000;
start = GC.GetTotalMemory(true);
watch.Restart();
var result2 = "没有重复项";
if (testIntList.Where(x => x + "" != "").Distinct().Count() > 1)
{
result2 = "高亮";
}
watch.Stop();
GC.Collect();
GC.WaitForFullGCComplete();
end = GC.GetTotalMemory(true);
long useMemory2 = end - start;
var useTime2 = (double)watch.ElapsedMilliseconds / 1000;
start = GC.GetTotalMemory(true);
watch.Restart();
//.Write("<script>alert('"+useTime1+"')</script>");
var result3 = "没有重复项";
var firStr = "";
foreach (var item in testIntList)
{
if (item + "" != "")
{
if (firStr + "" == "")
{
firStr = item.Trim();
}
else if (firStr.CompareTo(item.Trim()) != 0)
{
result3 = "高亮";
}
}
}
watch.Stop();
GC.Collect();
GC.WaitForFullGCComplete();
end = GC.GetTotalMemory(true);
long useMemory3 = end - start;
var useTime3 = (double)watch.ElapsedMilliseconds /1000;
%>
<script type="text/javascript">
console.log("<%=result %>:<%=useTime1 %>:<%=useMemory %>");
console.log("<%=result2 %>:<%=useTime2 %>:<%=useMemory2 %>");
console.log("<%=result3 %>:<%=useTime3 %>:<%=useMemory3 %>");
</script>