gpt4 book ai didi

java - 如何提高以同步方式处理多个 Arraylist 请求的性能,以将它们创建到没有重复的最终列表中

转载 作者:搜寻专家 更新时间:2023-11-01 03:53:16 27 4
gpt4 key购买 nike

我有一个场景,其中我有一个方法以如下图所示的形式将结果作为 Arraylist 获取。

enter image description here

因此,作为对图片的简要说明,我将得到 Result 1 作为第一个对象 block ,然后我将得到 Result 2,它实际上包含 < strong>Result 1 和一组新的对象,然后继续。

注意:所有这些对象 block 都将包含重复项。所以我将不得不过滤掉它。

我的目标是从这些 block 中创建一个列表,没有任何重复项,并且只有一个来自一个家族的对象(这些对象的一个​​特殊字符)。

请找到当前的代码片段,在我得到一大块结果时调用的同步方法中使用,我用它来实现这个:

在每次结果更新时,将使用结果 arrayList 调用此方法。

private synchronized void processRequestResult(QueryResult result)
{
ArrayList currArrayList = result.getResultsList();
ArrayList tempArrayList = result.getResultsList();

/**
* Remove all elements in prevArrayList from currArrayList
*
* As per the javadocs, this would take each record of currArrayList and compare with each record of prevArrayList,
* and if it finds both equal, it will remove the record from currArrayList
*
* The problem is that its easily of n square complexity.
*/
currArrayList.removeAll(prevArrayList);

// Clone and keep the currList for dealing with next List
prevArrayList = (ArrayList) tempArrayList.clone();


for (int i = 0; i < currArrayList.size(); i++)
{
Object resultObject = currArrayList.get(i);

// Check for if it reached the max of items to be displayed in the list.
if (hashMap.size() >= MAX_RESULT_LIMIT)
{
//Stop my requests
//Launch Message
break;
}

//To check if of the same family or duplicate
if (resultObject instanceof X)
{
final Integer key = Integer.valueOf(resultObject.familyID);
hashMap.put(key, (X)myObject);
}
else if (resultObject instanceof Y)
{
final Integer key = Integer.valueOf(resultObject.familyID);
hashMap.put(key, (Y)myObject);
}
}

// Convert the HashSet to arrayList
allResultsList = new ArrayList(hashMap.values());

//Update the change to screen
}

理论上,我应该只尝试解析我接下来收到的结果中的增量对象。因此,我使用了 arrayList 的 removeAll 方法,然后使用 hashMap 检查重复项和同族。

请查看我在代码中的内联注释,因此,我想获得一些指示以提高我在此过程中的性能。


更新:

这些对象的特殊性在于,一组对象可以属于同一个家族(一个ID),因此每个家族中只有一个对象应该出现在最终列表中。

这就是我使用 hashMap 并将 familyID 作为键的原因。

最佳答案

我不理解图表或代码,但我假设要求是创建一个唯一的元素列表。

首先,Set 确实是您所需要的:

Set<MyClass> set = new HashSet<MyClass>();

每次获得新的结果列表时:

set.addAll(list);

如果您真的需要一个列表:

List<MyClass> list = new ArrayList<MyClass>(set);

关于java - 如何提高以同步方式处理多个 Arraylist 请求的性能,以将它们创建到没有重复的最终列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18145082/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com