java 两个list相等_Java判断两个List是否相同

简书新手,第一次写博客,一是为了巩固一下,加深印象,二是留作一个底稿,方便以后查看。还有呢,就是希望在这里能得到大神得指点,以免误人子弟。

如有不足,敬请谅解,欢迎指正,谢谢!

一、背景

昨天写项目时遇到一个需求,要求第一次把服务端请求回来的List保存到本地,下次进来,需要判断服务端请求下来的List与本地保存的List是否相同,如果相同,则使用本地保存的;如果不同,则把服务端请求下来的List覆盖本地原先保存的。

so,我简单列了一下提纲:

1、先判断本地中是否有保存的, 没有则把请求回来的保存的到本地中;

2、有则判断请求回来的与本地中List个数是否相等 若不相等,则把请求回来的覆盖原先在本地中保存的;

3、若相等,遍历请求下来List与本地中保存的List各个元素是否一致 若不一致,则把请求回来的覆盖原先在本地中保存的;

4、若一致,则不做操作,直接使用原先保存的

然而,这样遍历如果数据量小还好,如果数据量大的话就得考虑一下性能了。

二、实战(比较两个Java list是否相同的性能优化)

1、最粗暴的方法 (遍历两个List)

package com.example;

import java.util.ArrayList;

public class CheckDiffList {

public static void main(String[] args) {

List list1 = new ArrayList();

List list2 = new ArrayList();

for (int i = 0; i < 10000; i++) {

list1.add("test" + i);

list2.add("test" + i * 2);

}

System.out.println(getDiffrent(list1, list2));

// 判断两个List内的元素是否相同

// getDiffrent total times 2514359

// false

}

/**

* 判断两个List内的元素是否相同

*

* @param list1

* @param list2

* @return

*/

private static boolean getDiffrent(List list1, List list2) {

long st = System.nanoTime();

if (list1.size() != list2.size()) {

System.out.println("getDiffrent total times " + (System.nanoTime() - st));

return false;

}

for (String str : list1) {

if (!list2.contains(str)) {

System.out.println("getDiffrent total times " + (System.nanoTime() - st));

return false;

}

}

System.out.println("getDiffrent total times " + (System.nanoTime() - st));

return true;

}

}

这种方法也就是我最初想到的,总共要循环的次数是两个List的size的乘积,从输出看耗时也是比较长的。

2、利用Java中为List提供的方法retainAll()

package com.example;

import java.util.ArrayList;

import java.util.List;

public class CheckDiffList {

public static void main(String[] args) {

List list1 = new ArrayList();

List list2 = new ArrayList();

for (int i = 0; i < 10000; i++) {

list1.add("test" + i);

list2.add("test" + i * 2);

}

System.out.println(getDiffrent2(list1, list2));

// 判断两个List内的元素是否相同

// getDiffrent2 total times 7563

// false

}

/**

* 判断两个List内的元素是否相同

*

* 此方法有bug 见Food.class

*

* @param list1

你可能感兴趣的:(java,两个list相等)