假设有以下数据:
/**
* 3 个张三,2 个李强
*/
public List<String> initList = Arrays.asList(
"张三",
"李四",
"张三",
"周一",
"刘四",
"李强",
"李白",
"张三",
"李强",
"王五"
);
- for循环添加去重
/** * for 循环添加去重 */ @Test public void remove1() { List<String> list = new ArrayList(initList); List<String> list2 = new ArrayList<>(); for (String element : list) { if (!list2.contains(element)) { list2.add(element); } } System.out.println(list2); }
- for双循环去重
/** * for 双循环去重 */ @Test public void remove2() { List<String> list = new ArrayList(initList); for (int i = 0; i < list.size() - 1; i++) { for (int j = list.size() - 1; j > i; j--) { if (list.get(j).equals(list.get(i))) { list.remove(j); } } } System.out.println(list); }
-
Set去重
/** * Set 去重,linkedHashSet 保证顺序 * 我们知道 Set 是不包含重复元素的,把 List 先装进 HashSet,然后再装回来,这样就保证了元素的不重复 */ @Test public void remove4() { List<String> list = new ArrayList(initList); List<String> list2 = new ArrayList(new LinkedHashSet(list)); System.out.println(list2); }
-
Stream去重
/** * Stream 去重 */ @Test public void remove5() { List<String> list = new ArrayList(initList); list = list.stream().distinct().collect(Collectors.toList()); System.out.println(list); }
- for循环重复坐标去重
/** * for 循环重复坐标去重 */ @Test public void remove3() { List<String> list = new ArrayList(initList); List<String> list2 = new ArrayList(initList); for (String element : list2) { if (list.indexOf(element) != list.lastIndexOf(element)) { list.remove(list.lastIndexOf(element)); } } System.out.println(list); }