国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

java 判斷兩個(gè)List是否包含 判斷兩個(gè)list相等

這篇具有很好參考價(jià)值的文章主要介紹了java 判斷兩個(gè)List是否包含 判斷兩個(gè)list相等。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

java 判斷兩個(gè)List是否包含 判斷兩個(gè)list相等
https://blog.51cto.com/u_12855/7333853

1、直接使用equals()比較

眾所周知,兩個(gè)列表具有完全相同的元素并且具有完全相同的順序時(shí),它們是相等的。因此, 如果我們業(yè)務(wù)要求兩個(gè)list順序一致,可以使用equals()方法進(jìn)行相等性檢查:

@Test
public void equalityCheckOfTwoLists() {
??
? ? List<Integer> list1 = Arrays.asList(1, 2, 3);
? ? List<Integer> list2 = Arrays.asList(1, 2, 3);
? ? List<Integer> list3 = Arrays.asList(2, 1, 3);
??
? ? assertTrue(list1.equals(list2));
? ? assertFalse(list1.equals(list3));
??
}

即使list1的和項(xiàng)目list3包含相同的元素{1,2,3},但是元素順序不一樣,所以list1和list3還是不相等的。

注意:
有的業(yè)務(wù)要求元素順序不必要求一致 我們要做的就是檢查兩個(gè)列表是否包含相同的元素,而不管它們?cè)诹斜碇械捻樞?,那如何去?shí)現(xiàn)呢?

2、將list排序之后再比較


處理邏輯主要有:
(1) 如果兩個(gè)list都為null,則返回true
(2)如果一個(gè)list不為空 ,另外一個(gè)指向空值返回false
(3)兩個(gè)list的size()不同 ,返回false。

public <T extends Comparable<T>> boolean isEquals(List<T> list1, List<T> list2){ ? ??
? ? if (list1 == null && list2 == null) {
? ? ? ? return true;
? ? }
? ? //Only one of them is null
? ? else if(list1 == null || list2 == null) {
? ? ? ? return false;
? ? }
? ? else if(list1.size() != list2.size()) {
? ? ? ? return false;?
? ? }
? ? ?
? ? //copying to avoid rearranging original lists
? ? list1 = new ArrayList<T>(list1);?
? ? list2 = new ArrayList<T>(list2); ??
??
? ? Collections.sort(list1);
? ? Collections.sort(list2); ? ? ?
? ? ?
? ? return list1.equals(list2);
}

請(qǐng)注意:
我們這里創(chuàng)建了兩個(gè)列表的副本來(lái)保證原始列表中的元素保持不變。

3、使用Sets / contains()比較list


如果列表沒(méi)有重復(fù)元素 ,我們可以使用list中創(chuàng)建TreeSet,然后使用equals()比較它們:

public <T extends Comparable<T>> boolean isEquals(List<T> list1, List<T> list2){ ? ??
? ? if (list1 == null && list2 == null) {
? ? ? ? return true;
? ? }
? ? //Only one of them is null
? ? else if(list1 == null || list2 == null) {
? ? ? ? return false;
? ? }
? ? else if(list1.size() != list2.size()) {
? ? ? ? return false;?
? ? }
??
? ? Set<T> set1 = new TreeSet<>(list1);
? ? Set<T> set2 = new TreeSet<>(list2);
? ? ?
? ? return set1.equals(set2);
}

我們可以更加簡(jiǎn)單使用contains()比較,不用創(chuàng)建 Sets:

return list1.containsAll(list2) && list2.containsAll(list1);

new HashSet<>(list1).containsAll(list2.get()) &&

new HashSet<>(list2.get()).containsAll(list1))?

new HashSet<>(list1.get()).containsAll(list2.get()) &&

new HashSet<>(list2.get()).containsAll(list1.get()))?? ??
? ? ? ? ? ? ?

但是這里要注意 如果我們list元素存在重復(fù),使用contains()或者 Sets比較就會(huì)有問(wèn)題??聪旅孢@個(gè)案例你就知道怎么回事了。

List<Integer> list1 = Arrays.asList(1, 2, 3, 3);
List<Integer> list2 = Arrays.asList(3, 1, 2, 2);
??
// will return true, but actual value should be false
System.out.println(list1.isEquals(list2));

在上面的示例中,list1包含一個(gè)2和兩個(gè)3,而list2包含兩個(gè)2和一個(gè)3,我們可以看到兩個(gè)list其實(shí)是不相等的,但是程序會(huì)錯(cuò)誤地返回true。所以使用這個(gè)方法時(shí)要確保list元素沒(méi)有重復(fù)的。

4、使用Apache Commons工具類


CollectionUtils提供了集合相等的判斷工具方法isEqualCollection,只要我們確保兩個(gè)集合非空可以直接使用該方法來(lái)判斷集合相等。

List<Integer> list1 = Arrays.asList(1, 2, 3, 3);
List<Integer> list2 = Arrays.asList(3, 1, 3, 2);
??
System.out.println(CollectionUtils.isEqualCollection(list1, list2)); //true


5、結(jié)論


今天我們學(xué)習(xí)了檢查Java中兩個(gè)列表是否相等4種方法,一般默認(rèn)情況下,當(dāng)兩個(gè)列表具有相同順序的相同元素時(shí),我們就知道它們是相等的。如果我們對(duì)元素的順序不太關(guān)心的話,可以采用其它幾種方法進(jìn)行列表相等性比較。

java list containsAll效率


https://blog.51cto.com/u_16175440/6861303


在Java中,List是一種常用的數(shù)據(jù)結(jié)構(gòu),用于存儲(chǔ)一組有序的元素。List提供了containsAll()方法用于判斷一個(gè)List是否包含另一個(gè)List中的所有元素。然而,在某些情況下,containsAll()方法的效率可能會(huì)變得很低,本文將對(duì)其效率進(jìn)行分析,并提供一些優(yōu)化的方法。

containsAll()方法的使用

在使用containsAll()方法之前,讓我們先了解一下它的用法。containsAll()方法接受一個(gè)Collection類型的參數(shù),用于判斷當(dāng)前List是否包含該Collection中的所有元素。它返回一個(gè)布爾值,表示是否包含所有元素。

以下是一個(gè)示例代碼:

List<Integer> list1 = new ArrayList<>();
list1.add(1);
list1.add(2);
list1.add(3);

List<Integer> list2 = new ArrayList<>();
list2.add(2);
list2.add(3);

boolean containsAll = list1.containsAll(list2);
System.out.println("List1 contains all elements of List2: " + containsAll); // 輸出:true

在上述示例中,我們定義了兩個(gè)List:list1和list2。list1包含了元素1、2和3,而list2只包含了元素2和3。通過(guò)調(diào)用list1.containsAll(list2)方法,我們可以判斷l(xiāng)ist1是否包含list2中的所有元素。在本例中,list1確實(shí)包含list2中的所有元素,因此containsAll的返回值為true。

containsAll()方法的效率問(wèn)題

盡管containsAll()方法非常方便,但它的效率并不總是很高。特別是當(dāng)List中的元素?cái)?shù)量較大時(shí),containsAll()方法可能會(huì)引起性能問(wèn)題。這是因?yàn)閏ontainsAll()方法的實(shí)現(xiàn)需要遍歷兩個(gè)List,并逐個(gè)比較元素是否相等。對(duì)于包含n個(gè)元素的List,這將導(dǎo)致O(n^2)的時(shí)間復(fù)雜度。

以下是一個(gè)包含大量元素的示例代碼:

List<Integer> longList = new ArrayList<>();
for (int i = 0; i < 10000; i++) {
? ? longList.add(i);
}

List<Integer> subList = new ArrayList<>();
for (int i = 9990; i < 10000; i++) {
? ? subList.add(i);
}

boolean containsAll = longList.containsAll(subList);
System.out.println("Long list contains all elements of sub list: " + containsAll);

在上述示例中,我們創(chuàng)建了一個(gè)包含10000個(gè)元素的longList,并從中截取了最后10個(gè)元素構(gòu)成subList。然后,我們使用containsAll()方法判斷l(xiāng)ongList是否包含subList中的所有元素。由于longList的長(zhǎng)度較大,containsAll()方法的執(zhí)行時(shí)間可能會(huì)很長(zhǎng)。

containsAll()方法的優(yōu)化

為了提高containsAll()方法的效率,我們可以采取一些優(yōu)化措施。以下是幾種常見(jiàn)的優(yōu)化方法:

使用Set代替List
由于List是有序的,containsAll()方法需要逐個(gè)比較元素的順序和值。而Set是無(wú)序的,containsAll()方法可以通過(guò)哈希表等數(shù)據(jù)結(jié)構(gòu)來(lái)快速判斷是否包含所有元素。因此,如果不需要保持元素的順序,可以考慮使用Set代替List來(lái)實(shí)現(xiàn)containsAll()方法。

Set<Integer> set1 = new HashSet<>(list1);
Set<Integer> set2 = new HashSet<>(list2);

boolean containsAll = set1.containsAll(set2);
System.out.println("Set1 contains all elements of Set2: " + containsAll);

通過(guò)將List轉(zhuǎn)換為Set,我們可以利用Set的高效查找特性,從而提高containsAll()方法的效率。

優(yōu)化equals()方法的復(fù)雜度
containsAll()方法的效率還受到元素的equals()方法實(shí)現(xiàn)復(fù)雜度的影響。如果元素的equals()方法的實(shí)現(xiàn)比較耗時(shí),那么containsAll()方法的效率也會(huì)下降。因此,我們可以優(yōu)化元素的equals()方法,以提高containsAll()方法的效率。

假設(shè)我們有一個(gè)自定義的元素類,其中equals()方法的實(shí)現(xiàn)如下:

登錄后復(fù)制?
public class MyElement {
? ? private int value;
? ??
? ? // 構(gòu)造函數(shù)、getter和
-----------------------------------文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-767219.html

到了這里,關(guān)于java 判斷兩個(gè)List是否包含 判斷兩個(gè)list相等的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Go語(yǔ)言如何判斷兩個(gè)對(duì)象是否相等

    在編程中,判斷兩個(gè)對(duì)象是否相等是一項(xiàng)常見(jiàn)的任務(wù),同時(shí)判斷對(duì)象是否相等在很多情況下都非常重要,例如: 單元測(cè)試 :編寫單元測(cè)試時(shí),經(jīng)常需要驗(yàn)證函數(shù)的輸出是否符合預(yù)期,這涉及到比較對(duì)象是否相等。 數(shù)據(jù)結(jié)構(gòu)操作 :在使用 map 等數(shù)據(jù)結(jié)構(gòu)時(shí),可能需要判斷兩個(gè)對(duì)

    2024年02月07日
    瀏覽(646)
  • java中判斷l(xiāng)ist是否為空

    java中判斷l(xiāng)ist是否為空

    java中判斷l(xiāng)ist是否為空是日常代碼中經(jīng)常遇到的問(wèn)題。最近發(fā)現(xiàn)一個(gè)Utils提供的方法可以一步判斷。 廢話不多說(shuō),直接上代碼! 結(jié)果: 注意:需要pom文件需要引入 import org.apache.commons.collections4.CollectionUtils;

    2024年02月15日
    瀏覽(25)
  • 在JS中如何判斷兩個(gè)對(duì)象是否相等

    在JavaScript中,判斷兩個(gè)對(duì)象是否相等有多種方法,取決于你對(duì) 相等 的定義以及對(duì)象屬性的類型。以下是幾種常見(jiàn)的方法: ? 1. 嚴(yán)格相等運(yùn)算符 (===) 使用 === 運(yùn)算符可以比較兩個(gè)對(duì)象是否引用同一個(gè)對(duì)象。如果兩個(gè)變量引用了同一個(gè)對(duì)象,則它們是相等的,否則它們是不相等

    2024年02月03日
    瀏覽(92)
  • java實(shí)用小技巧:判斷l(xiāng)ist是否有重復(fù)項(xiàng)

    java實(shí)用小技巧:判斷l(xiāng)ist是否有重復(fù)項(xiàng)

    在項(xiàng)目中經(jīng)常會(huì)遇到這樣的場(chǎng)景,就是一個(gè)list,根據(jù)某種規(guī)則,我要去判斷里面是不是有重復(fù)的項(xiàng)。 難度不高,但有點(diǎn)煩,所以專門開(kāi)一篇文章來(lái)記錄一下,爭(zhēng)取弄一個(gè)相對(duì)簡(jiǎn)潔的寫法。 先看一個(gè)簡(jiǎn)單的例子: ?這是一個(gè)泛型方法 `distinctList`,它接受一個(gè) `List` 類型的參數(shù)

    2023年04月14日
    瀏覽(21)
  • js 判斷兩個(gè)字符串是否相等(有兩種方法)

    使用比較運(yùn)算符判斷兩個(gè)字符串是否相等 可以使用比較運(yùn)算符 === 或 == 來(lái)判斷兩個(gè)字符串是否相等。例如: 在上述代碼中,我們定義了兩個(gè)字符串變量 str1 和 str2 ,并使用 === 運(yùn)算符來(lái)比較它們的值。如果兩個(gè)字符串相等,則輸出 兩個(gè)字符串相等 ;否則輸出 兩個(gè)字符串不相

    2024年02月05日
    瀏覽(108)
  • Python字符串比較:如何判斷兩個(gè)字符串是否相等?

    Python字符串比較:如何判斷兩個(gè)字符串是否相等? 在Python編程中,字符串是最常用的數(shù)據(jù)類型之一。當(dāng)我們需要比較兩個(gè)字符串時(shí),通常需要判斷它們是否相等。這篇文章將詳細(xì)介紹Python中比較兩個(gè)字符串的方法。 使用“==”運(yùn)算符比較字符串 在Python中,可以使用“==”運(yùn)算

    2023年04月11日
    瀏覽(111)
  • 【python基礎(chǔ)知識(shí)】python中怎么判斷兩個(gè)字符串是否相等

    【python基礎(chǔ)知識(shí)】python中怎么判斷兩個(gè)字符串是否相等

    目錄 有哪些判斷方法 1. == 運(yùn)算符 2. is 運(yùn)算符 有哪些特殊情況 1. 字符串中包含空格、換行符、制表符等特殊字符 2. 字符串編碼格式的不同 3. 字符串對(duì)象的創(chuàng)建方式不同 注意事項(xiàng) 1. 避免使用is運(yùn)算符進(jìn)行字符串比較 2. 注意空格、換行符、制表符等特殊字符的影響 3. 注意字符

    2024年02月08日
    瀏覽(113)
  • Java判斷List集合中的對(duì)象是否包含有某一元素

    Java判斷List集合中的對(duì)象是否包含有某一元素

    關(guān)于以下方法,直接可以在自己項(xiàng)目創(chuàng)建一個(gè)類,然后進(jìn)行測(cè)試使用!文本末尾也提供了每個(gè)方法的運(yùn)行結(jié)果,供大家參考使用! 文章大量使用到了Java8當(dāng)中的Lambda表達(dá)式,以及stream流相關(guān)基礎(chǔ)知識(shí)。如果您用的不熟,沒(méi)關(guān)系,可以直接復(fù)制下面的方案然后進(jìn)行套著使用即可

    2024年02月11日
    瀏覽(24)
  • 檢查一個(gè)Java List是否包含某個(gè)JavaBean對(duì)象的特定值,并且獲取這個(gè)值

    在這個(gè)例子中,我們使用了Java 8的 Optional 類來(lái)處理可能不存在的結(jié)果。如果找到了匹配的Bean對(duì)象,我們可以使用 get() 方法獲取它,并打印出其名稱。如果沒(méi)有找到匹配的Bean對(duì)象, isPresent() 方法將返回 false ,我們將打印出相應(yīng)的消息。

    2024年01月24日
    瀏覽(41)
  • python判斷是否為list。轉(zhuǎn)

    python判斷是否為list。轉(zhuǎn)

    python判斷是否為list ( - )浩( - )浩2019-08-31 09:05:39原創(chuàng) 判斷是否為列表 格式:print(isinstance(變量,list)) 1 print(isinstance(slink,list)) 結(jié)果 :true說(shuō)明為列表(list) 返回false說(shuō)明不是列表(list) 獲取類型 print(type(slink)) 執(zhí)行結(jié)果為:class ‘list’說(shuō)明為列表類型 isinstance和type區(qū)別 isinst

    2023年04月08日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包