簡體   English   中英

檢查List內對象值之間相等性的優化方法

[英]Optimized way to check for equality between value of Objects inside a List

我有兩個清單:
答:列出<MyCustomObject>
B.列出<MyCustomObject>

MyCustomObject有各種字段。 例如,字段ID

在我的程序中,我需要檢查兩個列表中是否存在相同的id 所以目前我正在進行嵌套迭代:

for(int i=0;i<a.size();i++) {

   MyCustomObject obj = a.get(i);

   for(int j=0;j<b.size();j++) {

    if( obj.getId().equals(b.get(j).getId()) {

        //do something
        break;
       }
   }
 }

由於我經常需要執行此操作,因此我看起來沒有優化,因為我經常迭代長列表。

我該如何優化此操作?

您可以使用Map (例如HashMap)而不是使用列表 - 假設您的id是int,它可能看起來像:

Map<Integer, MyCustomObject> objects = new HashMap<>();
//populate
objects.put(someCustomObject.getId(), someCustomObject);
//find an id:
CustomObject obj = objects.get(someId);

注意:假設id是唯一的。

線性時間算法是將第一個列表中的ID值與布爾值進行散列。 然后,您在第二個列表上行進以查找ID值,如果散列已包含該ID的密鑰,則在兩個列表之間共享該ID。

您還可以通過按ID排序列表來改進O(n ^ 2)的運行時間,這是一個O(n log n)操作,並且線性地遍歷列表以查看是否共享任何值。 如果要保持列表的順序,可以創建列表的另一個排序副本,但這會增加內存空間。

我相信,在不改變列表元素的順序或創建新的數據結構的情況下,您所擁有的就是您所能做的。 但是,我不知道你的要求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM