/**
* LinkedHashSet有個特性:不能添加重複數據並能保證添加順序
*
* @param list
*/
public static void removeListDuplicate1(List<String> list) {
LinkedHashSet<String> set = new LinkedHashSet<>(list.size());
set.addAll(list);
list.clear();
list.addAll(set);
}
/**
* 利用HashSet不能添加重複數據的特性
* 由於HashSet不能保證添加順序,所以只能作爲判斷條件:
*
* @param list
*/
public static void removeListDuplicate2(List<String> list) {
HashSet<String> set = new HashSet<>(list.size());
List<String> result = new ArrayList<>(list.size());
for (String str : list) {
if (set.add(str)) {
result.add(str);
}
}
list.clear();
list.addAll(result);
}
/**
* 利用List的contains方法循環遍歷,很容易想到,但是效率也很感人
*
* @param list
*/
private static void removeListDuplicate3(List<String> list) {
List<String> result = new ArrayList<>(list.size());
for (String str : list) {
if (!result.contains(str)) {
result.add(str);
}
}
list.clear();
list.addAll(result);
}
三種方法有何區別呢?測試一下: