重写HashCode配合Set去重:
首先,定义一个实体类:
public class UserDto {
private String id;
private String name;
private String email;
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((email == null) ? 0 : email.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
UserDto other = (UserDto) obj;
if (email == null) {
if (other.email != null)
return false;
} else if (!email.equals(other.email))
return false;
return true;
}
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;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
关键就是重写对应的hashcode和equals方法。按那个字段进行去重,在equals方法中:
UserDto other = (UserDto) obj;
if (email == null) {
if (other.email != null)
return false;
} else if (!email.equals(other.email))
return false;
然后:
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class TestMain {
<span style="white-space:pre"> </span>/**
<span style="white-space:pre"> </span> * @Title: main
<span style="white-space:pre"> </span> * @Description: TODO(功能描述:)
<span style="white-space:pre"> </span> * @param @param args 设定文件
<span style="white-space:pre"> </span> * @return void 返回类型
<span style="white-space:pre"> </span> * @throws
<span style="white-space:pre"> </span> */
<span style="white-space:pre"> </span>public static void main(String[] args) {
<span style="white-space:pre"> </span>// TODO Auto-generated method stub
<span style="white-space:pre"> </span>Set<UserDto> user = new HashSet<UserDto>();
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>UserDto u1 = new UserDto();
<span style="white-space:pre"> </span>u1.setId("123");
<span style="white-space:pre"> </span>u1.setName("allen");
<span style="white-space:pre"> </span>u1.setEmail("123@qq.com");
<span style="white-space:pre"> </span>UserDto u2 = new UserDto();
<span style="white-space:pre"> </span>u1.setId("123");
<span style="white-space:pre"> </span>u1.setName("allen");
<span style="white-space:pre"> </span>u1.setEmail("123@qq.com");
<span style="white-space:pre"> </span>UserDto u3 = new UserDto();
<span style="white-space:pre"> </span>u1.setId("fasdf");
<span style="white-space:pre"> </span>u1.setName("dfasdf");
<span style="white-space:pre"> </span>u1.setEmail("1321312@qq.com");
<span style="white-space:pre"> </span>user.add(u1);
<span style="white-space:pre"> </span>user.add(u2);
<span style="white-space:pre"> </span>user.add(u3);
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>System.out.println(user.size());
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>Object [] obj = user.toArray();
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>UserDto[] contactDtos = new UserDto[obj.length];
<span style="white-space:pre"> </span>for(int i = 0;i<obj.length;i++){
<span style="white-space:pre"> </span>contactDtos[i] = (UserDto) obj[i];
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>System.out.println(contactDtos.length);
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>}
}
这样输出的结果就只有:
2个,就去掉了重复的