针对list集合去重的几种方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 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 

猜你喜欢

转载自blog.csdn.net/zhou_fan_xi/article/details/84100430
今日推荐