/**
* 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);
}
三种方法有何区别呢?测试一下: