Java中List去重的四种方法


package com.lxz.test;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

/**
 * description: List去重
 * date: 2018年2月10日
 * author: www.luxinzhi.com
 */
public class ListRemoveDuplicate {

	// Java中去重的方法有很多,常用的方法主要有下面4种
	// 1. 循环list中的所有元素然后删除重复元素
	@SuppressWarnings("rawtypes")
	public static List removeDuplicate1(List list) {
		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);
				}
			}
		}
		return list;
	}

	// 2. 通过HashSet踢除重复元素
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public static List removeDuplicate2(List list) {
		HashSet set = new HashSet(list);
		// 保持原有顺序
		// HashSet set = new LinkedHashSet(list);
list.clear();
		list.addAll(set);
		return list;
	}

	// 3. 删除ArrayList中重复元素,保持原有顺序
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public static List removeDuplicateWithOrder3(List list) {
		Set set = new HashSet();
		List newList = new ArrayList();
		for (Iterator iter = list.iterator(); iter.hasNext();) {
			Object element = iter.next();
			if (set.add(element)) {
				newList.add(element);
			}
		}
		list.clear();
		list.addAll(newList);
		return list;
	}

	// 4. 把list里的对象遍历一遍,用list.contain(),如果不存在就放入到另外一个list集合中
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public static List removeDuplicate4(List list) {
		List newList = new ArrayList();
		for (int i = 0; i < list.size(); i++) {
			if (!newList.contains(list.get(i))) {
				newList.add(list.get(i));
			}
		}
		return newList;
	}

	@SuppressWarnings("rawtypes")
	public static void main(String[] args) {
		List list = new ArrayList<>();
		list.add("aaa");
		list.add("ccc");
		list.add("bbb");
		list.add("ccc");
		list.add("ddd");
		list.add("aaa");

		List list1 = removeDuplicate1(list);
		List list2 = removeDuplicate2(list);
		List list3 = removeDuplicateWithOrder3(list);
		List list4 = removeDuplicate4(list);

		System.out.println("--------1--------");
		for (int i = 0; i < list1.size(); i++) {
			System.out.println(list1.get(i));
		}
		System.out.println("--------2--------");
		for (int i = 0; i < list2.size(); i++) {
			System.out.println(list2.get(i));
		}
		System.out.println("--------3--------");
		for (int i = 0; i < list3.size(); i++) {
			System.out.println(list3.get(i));
		}
		System.out.println("--------4--------");
		for (int i = 0; i < list4.size(); i++) {
			System.out.println(list4.get(i));
		}

	}

}

 

输出结果

--------1--------
aaa
ccc
bbb
ddd
--------2--------
aaa
ccc
bbb
ddd
--------3--------
aaa
ccc
bbb
ddd
--------4--------
aaa
ccc
bbb
ddd

转自 http://www.luxinzhi.com/java/70.html 侵删

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值