最近在做项目的时候有用到对两个集合中的元素进行对比求其交集的情况,因为涉及到的数据量比较大,所以在进行求两个集合中元素交集的时候,就应该考虑到程序运行的时间消耗等问题,
这种方法使用的是map的特性,首先将list集合中的元素依次存入一个map中去,然后再以map的get方法来判断是否存在这样的元素。
这种方法的效率最高,在10万条数据的测试下,这种方法耗时仅仅在十几毫秒,而其他方法在将近一百多毫秒。
在百万条数据进行对比处理的时候,使用map特性的方法时间消耗大概在40毫秒左右,但是其他方法要将近10秒钟,
所以在对于大量数据的处理过程中,还是非常建议使用这种方法的。
代码示例如下:
* 方法3,求两个集合交集,(map)
* @param arr1
* @param arr2
* @return
public
List
<
Object
>
intersectionForList_3
(
List
<
Object
>
arr1
,
List
<
Object
>
arr2
)
{
long
startTime
=
System
.
currentTimeMillis
(
)
;
List
<
Object
>
resultList
=
new
ArrayList
<
>
(
)
;
Map
<
String
,
Object
>
map
=
new
HashMap
<
>
(
)
;
arr1
.
forEach
(
a1
->
{
map
.
put
(
a1
+
""
,
a1
)
;
}
)
;
arr2
.
forEach
(
a2
->
{
Object
obj
=
map
.
get
(
a2
+
""
)
;
if
(
obj
!=
null
)
{
resultList
.
add
(
obj
)
;
}
)
;
long
endTime
=
System
.
currentTimeMillis
(
)
;
log
.
info
(
"intersectionForList_3:"
+
(
endTime
-
startTime
)
)
;
return
resultList
;