高效求兩個list的差集

2021-09-05 01:36:42 字數 1476 閱讀 8487

查乙個lista 的每個值(string字串)在另外乙個listb中是否存在,如果不存在就記錄下來。

模擬資料量:100萬

方法一:

直接呼叫list自帶的removeall方法

public static void main(string args) throws ioexception 

for (int i = 0; i < 1000000; i++)

long starttime = system.currenttimemillis();

lista.removeall(listb);

long endtime = system.currenttimemillis();

}

耗時:好幾分鐘了都沒好,等不下去

原因:

removeall()內部的實現如下,直接實現暴力遍歷的方法:

public boolean removeall(collection<?> c)

}return modified;

}再看看方法內部的contains(),也是直接暴力

public boolean contains(object o) else

return false;

}

方法二(jdk為1.8):

借用hashmap,空間換取時間

public static void main(string args) throws ioexception 

for (int i = 0; i < 1000000; i++)

long starttime = system.currenttimemillis();

hashmapmap = new hashmap();

for (int i = 0; i < 1000000; i++)

lista.clear();

for (int i = 0; i < 1000000; i++)

}long endtime = system.currenttimemillis();

}

耗時:535ms,1秒不到。

分析:

與方法一不同的地方是,我們借用了hashmap(jdk1.8),為什麼要用hashmap,

其實是因為hashmap的containskey方法,jdk1.8後它引入了紅黑樹,優化了查詢速度(查詢時間複雜度為 o(logn))。

其實現如下

public boolean containskey(object key)

final nodegetnode(int hash, object key) while ((e = e.next) != null);}}

return null;

}

了解:hashmap 在 jdk 1.8 後新增的紅黑樹結構

jdk1.7中hashmap底層實現原理

高效比較兩個list集合中的差集

listdifferent new arraylist listmaxlist list1 listminlist list2 if list2.size list1.size mapmap new hashmap maxlist.size for department department max...

python 兩個list 求交集,並集,差集

在python中,陣列可以用list來表示。如果有兩個陣列,分別要求交集,並集與差集,怎麼實現比較方便呢?當然最容易想到的是對兩個陣列做迴圈,即寫兩個for迴圈來實現。這種寫法大部分同學應該都會,而且也沒有太多的技術含量,本博主就不解釋了。這裡給大家使用更為裝bility的一些方法。老規矩,talk...

兩個List取差集

兩個物件list,直接比較是不行的,因為他們存的位址不一樣 需要重寫gethashcode 與equals object obj 方法告訴電腦 public class model public string name public override intgethashcode public ov...