版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhou_fan_xi/article/details/84100430
list集合去重分对整体对象去重和根据对象中某个字段去重,以下对这两种方式的去重进行区别。
1、list集合中针对整体对象去重
这种方法就相对比较死板,必须集合的对象中每个字段都相同才能去重。
- 使用双重循环针对集合对象去重,实例代码如下:
public static void main(String[] args) {
remove();
}
public static void remove() {
List<User> users = new ArrayList<User>();
User user = new User();
user.setUserName("zhangsan");
user.setPassword("123456");
users.add(user);
User user1 = new User();
user1.setPassword("8945654");
user1.setUserName("wanggnag");
users.add(user1);
User user2 = new User();
user2.setUserName("zhangsan");
user2.setPassword("123456");
users.add(user2);
System.out.println("循环去重前的集合:" + users.toString());
for (int i = 0; i < users.size() - 1; i++) {
for (int j = users.size() - 1; j > i; j--) {
if (users.get(i).equals(users.get(j))) {
users.remove(j);
}
}
}
System.out.println("循环去重后的集合:" + users.toString());
}
运行结果
循环去重前的集合:[User(userName=zhangsan, password=123456), User(userName=wanggnag, password=8945654), User(userName=zhangsan, password=123456)]
循环去重后的集合:[User(userName=zhangsan, password=123456), User(userName=wanggnag, password=8945654)]
- 使用set集合针对集合对象去重,hashset不进行排序,还有一种方法是用treeset,去重并且按照自然顺序排列实例代码如下:
public static void main(String[] args) {
remove();
}
public static void remove() {
List<User> users = new ArrayList<User>();
User user = new User();
user.setUserName("zhangsan");
user.setPassword("123456");
users.add(user);
User user1 = new User();
user1.setPassword("8945654");
user1.setUserName("wanggnag");
users.add(user1);
User user2 = new User();
user2.setUserName("zhangsan");
user2.setPassword("123456");
users.add(user2);
System.out.println("set去重前的集合:" + users.toString());
List<User> use = new ArrayList<User>();
Set<User> set = new HashSet<User>(users);
System.out.println("set去重后的集合:" + set.toString());
}
运行结果如图
set去重前的集合:[User(userName=zhangsan, password=123456), User(userName=wanggnag, password=8945654), User(userName=zhangsan, password=123456)]
set去重后的集合:[User(userName=wanggnag, password=8945654), User(userName=zhangsan, password=123456)]
- 使用简单循环针对集合对象去重,实例代码如下:
public static void main(String[] args) {
remove();
}
public static void remove() {
List<User> users = new ArrayList<User>();
User user = new User();
user.setUserName("zhangsan");
user.setPassword("123456");
users.add(user);
User user1 = new User();
user1.setPassword("8945654");
user1.setUserName("wanggnag");
users.add(user1);
User user2 = new User();
user2.setUserName("zhangsan");
user2.setPassword("123456");
users.add(user2);
System.out.println("循环去重前的集合:" + users.toString());
List<User> use = new ArrayList<User>();
for (User userr : users) {
if (!use.contains(userr)) {
use.add(userr);
}
}
System.out.println("循环去重后的集合:" + use.toString());
}
运行结果:
循环去重前的集合:[User(userName=zhangsan, password=123456), User(userName=wanggnag, password=8945654), User(userName=zhangsan, password=123456)]
循环去重后的集合:[User(userName=zhangsan, password=123456), User(userName=wanggnag, password=8945654)]
2、list集合中根据对象中某个字段去重
实例代码如下:
public static void duplicate() {
List<User> users = new ArrayList<User>();
User user = new User();
user.setUserName("zhangsan");
user.setPassword("123456");
users.add(user);
User user1 = new User();
user1.setPassword("8945654");
user1.setUserName("wanggnag");
users.add(user1);
User user2 = new User();
user2.setUserName("zhangsan");
user2.setPassword("8945654");
users.add(user2);
System.out.println("去重前:"+users);
List<User> userList = removeDuplicateDate(users);
for (User use : userList) {
System.out.println("去重后"+use.getUserName() + "::" + use.getPassword());
}
}
public static List<User> removeDuplicateDate(List<User> users) {
Set<User> set = new TreeSet<User>(new Comparator<User>() {
public int compare(User o1, User o2) {
// TODO Auto-generated method stub
return o1.getUserName().compareTo(o2.getUserName());
}
});
set.addAll(users);
return new ArrayList<User>(set);
}
public static void main(String[] args) {
duplicate();
}
运行结果:
去重前:[User(userName=zhangsan, password=123456), User(userName=wanggnag, password=8945654), User(userName=zhangsan, password=8945654)]
去重后wanggnag::8945654
去重后zhangsan::123456
3、list集合中查看重复数据
public static void main(String[] args) {
List<String> l =new ArrayList<String>();
l.add("a") ;
l.add("a") ;
l.add("b") ;
l.add("b") ;
l.add("b") ;
l.add("c") ;
l.add("d") ;
l.add("d") ;
HashMap<String, Integer> hs = new HashMap<String, Integer>();
for (String string : l) {
Integer count = 1;
if(hs.get(string) != null) {
count = hs.get(string) + 1;
}
hs.put(string, count);
}
System.out.println(hs);
System.out.print("重复的有:");
for (String key : hs.keySet()) {
if (hs.get(key)!=null & hs.get(key)>1) {
System.out.print(key+" ");
}
}
}
运行结果:
{a=2, b=3, c=1, d=2}
重复的有:a b d
扫描二维码关注公众号,回复:
4661535 查看本文章