------- android培训、java培训、期待与您交流! ----------
集合元素去重需要经过两个关键步骤:
1、判断集合中是否存在指定元素;
2、将新元素插入集合中。
下面我们来看两个具体的集合:ArrayList 和 HashSet。
1、ArrayList
ArrayList通过contains()方法判断是否存在指定元素,是通过集合遍历并比较的方式进行的。通过查看ArrayList的contains方法的源码,发现其最终会调用他本身的indexOf方法:
public int indexOf(Object elem) {
if (elem == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (elem.equals(elementData[i]))
return i;
}
return -1;
}
通过上面代码可以看出,如果元素数量太大的情况下,这种方式性能将会很低。
2、HashSet
通过查看HashSet的源码,发现其内部使用的是HashMap,这是HashSet的contains的源码:
public boolean contains(Object o) {
return map.containsKey(o);
}
可见HashSet是通过判断对象的Hash值是否相同来判断是否存在这个元素的,而Hash函数的时间复杂度为O(1),所以要比ArrayList的遍历判断方式快多了。