其他
面试官:怎么去除 List 中的重复元素?我一行代码搞定,赶紧拿去用!
问题
怎么去除 List<String> 中的重复元素呢?
List 去重方案
* 3 个张三,2 个李强
*/
public List<String> initList = Arrays.asList(
"张三",
"李四",
"张三",
"周一",
"刘四",
"李强",
"李白",
"张三",
"李强",
"王五"
);
https://github.com/javastacks/javastack
1、for 循环添加去重
* for 循环添加去重
* @author: 栈长
* @from: 公众号Java技术栈
*/
@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);
}
[张三, 李四, 周一, 刘四, 李强, 李白, 王五]
2、for 双循环去重
* for 双循环去重
* @author: 栈长
* @from: 公众号Java技术栈
*/
@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);
}
[张三, 李四, 周一, 刘四, 李强, 李白, 王五]
3、for 循环重复坐标去重
* for 循环重复坐标去重
* @author: 栈长
* @from: 公众号Java技术栈
*/
@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);
}
[张三, 李四, 周一, 刘四, 李强, 李白, 王五]
4、Set 去重
* Set 去重
* @author: 栈长
* @from: 公众号Java技术栈
*/
@Test
public void remove4() {
List<String> list = new ArrayList(initList);
List<String> list2 = new ArrayList(new HashSet(list));
System.out.println(list2);
}
[李强, 李四, 张三, 周一, 李白, 王五, 刘四]
* Set 去重
* @author: 栈长
* @from: 公众号Java技术栈
*/
@Test
public void remove4() {
List<String> list = new ArrayList(initList);
List<String> list2 = new ArrayList(new LinkedHashSet(list));
System.out.println(list2);
}
[张三, 李四, 周一, 刘四, 李强, 李白, 王五]
5、Stream 去重
* Stream 去重
* @author: 栈长
* @from: 公众号Java技术栈
*/
@Test
public void remove5() {
List<String> list = new ArrayList(initList);
list = list.stream().distinct().collect(Collectors.toList());
System.out.println(list);
}
[张三, 李四, 周一, 刘四, 李强, 李白, 王五]
总结
for 循环添加去重 for 双循环去重 for 循环重复坐标去重 Set 去重 Stream 去重
https://github.com/javastacks/javastack
版权声明: 本文系公众号 "Java技术栈" 原创,转载、引用本文内容请注明出处,抄袭、洗稿一律投诉侵权,后果自负,并保留追究其法律责任的权利。
End