比较两个集合是否相等

package com.yuan.checkdiffList;

import org.apache.commons.collections.CollectionUtils;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class CheckDiffList {
	public static void main(String[] args) {
		List<String> list = new ArrayList<>();
		List<String> list1 = new ArrayList<>();
		for (int i = 0; i < 1000; i++) {
			list.add("test" + i);
			list1.add("test" + (i * 2));
		}
		String[] arr = {"1", "2", "2"};
		String[] arr1 = {"1", "1", "2"};
		list = Arrays.asList(arr);
		list1 = Arrays.asList(arr1);
//		System.out.println(checkDifferent(list, list1));
//		System.out.println(checkDifferent2(list, list1));
//		System.out.println(checkDifferent3(list, list1));
//		System.out.println(checkDifferent4(list, list1));
		System.out.println(checkDifferent5(list, list1));
	}

	/**
	 * 方法一:使用contains()进行比较
	 * 注意:当集合里有重复元素时,此方法不可行
	 *
	 * @param list
	 * @param list1
	 * @return
	 */
	private static boolean checkDifferent(List<String> list, List<String> list1) {
		long startTime = System.nanoTime();
		if (list == null && list1 == null) {
			return true;
		} else if (list == null || list1 == null) {
			return false;
		}
		if (list.size() != list1.size()) {
			System.out.println("spare time:" + (System.nanoTime() - startTime));
			return false;
		}
//		for (String str : list) {
//			if (!list1.contains(str)) {
//				System.out.println("spare time:"+(System.nanoTime()-startTime));
//				return false;
//			}
//		}
		if (list.containsAll(list1) && list1.containsAll(list)) {
			System.out.println("spare time:" + (System.nanoTime() - startTime));
			return true;
		}
		System.out.println("spare time:" + (System.nanoTime() - startTime));
		return false;
	}

	/**
	 * 方法二:使用apache common工具类
	 *
	 * @param list
	 * @param list1
	 * @return
	 */
	private static boolean checkDifferent2(List<String> list, List<String> list1) {
		long startTime = System.nanoTime();
		boolean isEqual;
		if (list == null && list1 == null) {
			isEqual = true;
		} else if (list == null || list1 == null) {
			isEqual = false;
		} else {
			isEqual = CollectionUtils.isEqualCollection(list, list1);
		}
		System.out.println("spare time:" + (System.nanoTime() - startTime));
		return isEqual;
	}

	/**
	 * 方法三:如果业务要求两个list的顺序一致,内容一致,直接使用equals()方法
	 *
	 * @param list
	 * @param list1
	 * @return
	 */
	private static boolean checkDifferent3(List<String> list, List<String> list1) {
		boolean isEqual;
		if (list == null && list1 == null) {
			isEqual = true;
		} else if (list == null || list1 == null) {
			isEqual = false;
		} else {
			isEqual = list.equals(list1);
		}
		return isEqual;
	}

	/**
	 * 方法四:将集合排序后进行比较
	 *
	 * @param list
	 * @param list1
	 */
	private static boolean checkDifferent4(List<String> list, List<String> list1) {
		long startTime = System.nanoTime();
		if (list == null && list1 == null) {
			return true;
		} else if (list == null || list1 == null) {
			return false;
		}
		if (list.size() != list1.size()) {
			System.out.println("spare time:" + (System.nanoTime() - startTime));
			return false;
		}
		Collections.sort(list);
		Collections.sort(list1);
		boolean isEqual=list1.equals(list);
		System.out.println("spare time:" + (System.nanoTime() - startTime));
		return isEqual;
	}
	/**
	 * 方法四:将集合排序,然后转为String后进行比较,效率更高
	 *
	 * @param list
	 * @param list1
	 */
	private static boolean checkDifferent5(List<String> list, List<String> list1) {
		long startTime = System.nanoTime();
		if (list == null && list1 == null) {
			return true;
		} else if (list == null || list1 == null) {
			return false;
		}
		if (list.size() != list1.size()) {
			return false;
		}
//		list.sort(Comparator.comparing(String::hashCode));
//		list1.sort(Comparator.comparing(String::hashCode));
		Collections.sort(list);
		Collections.sort(list1);
		boolean isEqual=list1.toString().equals(list.toString());
		System.out.println("spare time:" + (System.nanoTime() - startTime));
		return isEqual;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值