目录
0.码仙励志
1.TreeSet去重
2.HashSet去重
3.for循环去重
4.HashMap去重
5.stream去重
人生四然:来是偶然,去是必然,尽其当然,顺其自然。
package com.maxian.test;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
public class TestList1 {
public static void main(String[] args) {
List list = new ArrayList();
list.add(new User1("1", "张三1"));
list.add(new User1("1", "张三2"));
list.add(new User1("2", "张三3"));
list.add(new User1("2", "张三4"));
list.add(new User1("3", "张三5"));
System.out.println("去重前:");
for (User1 user : list) {
System.out.println(user);
}
System.out.println("去重后:");
List newList = removeDuplicateUser(list);
for (User1 user : newList) {
System.out.println(user);
}
}
private static ArrayList removeDuplicateUser(List users) {
Set set = new TreeSet(new Comparator() {
@Override
public int compare(User1 o1, User1 o2) {
// 字符串,则按照asicc码升序排列
return o1.getId().compareTo(o2.getId());
}
});
set.addAll(users);
return new ArrayList(set);
}
}
class User1 {
private String id;
private String name;
public User1(String id, String name) {
super();
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User1 [id=" + id + ", name=" + name + "]";
}
}
运行结果:
去重前:
User1 [id=1, name=张三1]
User1 [id=1, name=张三2]
User1 [id=2, name=张三3]
User1 [id=2, name=张三4]
User1 [id=3, name=张三5]
去重后:
User1 [id=1, name=张三1]
User1 [id=2, name=张三3]
User1 [id=3, name=张三5]
这种方式需要重写equals和hashCode方法
package com.maxian.test;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class TestList2 {
public static void main(String[] args) {
List list = new ArrayList();
list.add(new User2("1", "张三1"));
list.add(new User2("1", "张三2"));
list.add(new User2("2", "张三3"));
list.add(new User2("2", "张三4"));
list.add(new User2("3", "张三5"));
System.out.println("去重前:");
for (User2 user : list) {
System.out.println(user);
}
System.out.println("去重后:");
Set userSet = new HashSet(list);
List newList = new ArrayList(userSet);
for (User2 user : newList) {
System.out.println(user);
}
}
}
class User2 {
private String id;
private String name;
public User2(String id, String name) {
super();
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public boolean equals(Object obj) {
User2 u = (User2) obj;
return id.equals(u.id);
}
@Override
public int hashCode() {
String in = id;
return in.hashCode();
}
@Override
public String toString() {
return "User2 [id=" + id + ", name=" + name + "]";
}
}
运行结果:
去重前:
User2 [id=1, name=张三1]
User2 [id=1, name=张三2]
User2 [id=2, name=张三3]
User2 [id=2, name=张三4]
User2 [id=3, name=张三5]
去重后:
User2 [id=1, name=张三1]
User2 [id=2, name=张三3]
User2 [id=3, name=张三5]
package com.maxian.test;
import java.util.ArrayList;
import java.util.List;
public class TestList3 {
public static void main(String[] args) {
List list = new ArrayList();
list.add(new User3("1", "张三1"));
list.add(new User3("1", "张三2"));
list.add(new User3("2", "张三3"));
list.add(new User3("2", "张三4"));
list.add(new User3("3", "张三5"));
System.out.println("去重前:");
for (User3 user : list) {
System.out.println(user);
}
System.out.println("去重后:");
List repeatList = new ArrayList();// 用于存放重复的元素的list
for (int i = 0; i < list.size() - 1; i++) {
for (int j = list.size() - 1; j > i; j--) {
if (list.get(j).getId().equals(list.get(i).getId())) {
repeatList.add(list.get(j));// 把相同元素加入list(找出相同的)
list.remove(j);// 删除重复元素
}
}
}
for (User3 user : list) {
System.out.println(user);
}
System.out.println("相同的元素:");
for (User3 user : repeatList) {
System.out.println(user);
}
}
}
class User3 {
private String id;
private String name;
public User3(String id, String name) {
super();
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User3 [id=" + id + ", name=" + name + "]";
}
}
运行结果:
去重前:
User3 [id=1, name=张三1]
User3 [id=1, name=张三2]
User3 [id=2, name=张三3]
User3 [id=2, name=张三4]
User3 [id=3, name=张三5]
去重后:
User3 [id=1, name=张三1]
User3 [id=2, name=张三3]
User3 [id=3, name=张三5]
相同的元素:
User3 [id=1, name=张三2]
User3 [id=2, name=张三4]
package com.maxian.test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class TestList4 {
public static void main(String[] args) {
List list = new ArrayList();
list.add(new User4("1", "张三1"));
list.add(new User4("1", "张三2"));
list.add(new User4("2", "张三3"));
list.add(new User4("2", "张三4"));
list.add(new User4("3", "张三5"));
System.out.println("去重前:");
for (User4 user : list) {
System.out.println(user);
}
System.out.println("去重后:");
List newList = new ArrayList();// 用于存放没有重复的元素的list
List repeatList = new ArrayList();// 用于存放重复的元素的list
// 利用map.containsKey()
Map map = new HashMap<>();
for (User4 user : list) {
// 1:map.containsKey() 检测key是否重复
if (map.containsKey(user.getId())) {
repeatList.add(user);
} else {
map.put(user.getId(), 1);
newList.add(user);
}
// 2: 这个key是不是存在对应的value(key是否在map中)
// if (map.get(user.getId()) == null) {
// map.put(user.getId(), 1);
// newList.add(user);
// } else {
// repeatList.add(user);
// }
}
for (User4 user : newList) {
System.out.println(user);
}
System.out.println("相同的元素:");
for (User4 user : repeatList) {
System.out.println(user);
}
}
}
class User4 {
private String id;
private String name;
public User4(String id, String name) {
super();
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User4 [id=" + id + ", name=" + name + "]";
}
}
运行结果:
去重前:
User4 [id=1, name=张三1]
User4 [id=1, name=张三2]
User4 [id=2, name=张三3]
User4 [id=2, name=张三4]
User4 [id=3, name=张三5]
去重后:
User4 [id=1, name=张三1]
User4 [id=2, name=张三3]
User4 [id=3, name=张三5]
相同的元素:
User4 [id=1, name=张三2]
User4 [id=2, name=张三4]
需要jdk版本为1.8及以上
package com.maxian.test;
import java.util.ArrayList;
import java.util.List;
public class TestList5 {
public static void main(String[] args) {
List list = new ArrayList();
list.add(new User5("1", "张三1"));
list.add(new User5("1", "张三2"));
list.add(new User5("2", "张三3"));
list.add(new User5("2", "张三4"));
list.add(new User5("3", "张三5"));
System.out.println("去重前:");
for (User5 user : list) {
System.out.println(user);
}
System.out.println("去重后:");
List newList = new ArrayList();// 用于存放没有重复的元素的list
for (User5 user : list) {
// anyMatch表示,判断的条件里,任意一个元素成功,返回true
boolean b = newList.stream().anyMatch(u -> u.getId().equals(user.getId()));
if (!b) {
newList.add(user);
}
}
for (User5 user : newList) {
System.out.println(user);
}
}
}
class User5 {
private String id;
private String name;
public User5(String id, String name) {
super();
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User5 [id=" + id + ", name=" + name + "]";
}
}
运行结果:
去重前:
User5 [id=1, name=张三1]
User5 [id=1, name=张三2]
User5 [id=2, name=张三3]
User5 [id=2, name=张三4]
User5 [id=3, name=张三5]
去重后:
User5 [id=1, name=张三1]
User5 [id=2, name=张三3]
User5 [id=3, name=张三5]
参考文献:
https://blog.csdn.net/u013821825/article/details/66969683
https://www.cnblogs.com/pcheng/p/10930944.html
https://blog.csdn.net/qq_34203492/article/details/78561562