哪个是比较存储在数组中的大量值的最有效方法?

时间:2016-02-15 13:15:18

标签: java arrays algorithm data-structures

我有数千个值存储在Java中的数组中。我想将每个值与数组中的每个其他值进行比较。

目前我正在使用两个嵌套循环进行比较。此方法导致堆空间内存错误。

以下是我目前正在使用的代码:

for(int i=0; i<arr.size(); i++)
{
    for(int j=i+1; j<arr.size(); j++)
    {
        //CODE FOR COMPARING arr[i] and arr[j]
        //performing some more operations here which contain loops and functions
    }
}

哪种方法可以比较如此大量的数据?

修改 我正在使用eclipse执行此操作。

ArrayList是string类型。

我正在使用&#34; .equals&#34;

进行比较

我还在循环中执行了一些操作,这需要更多的内存。

我甚至试图在循环中放置一个打印计数来知道循环执行了多少次。它执行了超过32K次。

2 个答案:

答案 0 :(得分:2)

根据您的类型,您可以

  • 对数组进行排序并使用二进制排序O(N log N)
  • 将元素添加到HashMap并查找任何匹配O(N),但这取决于您对值的处理方式。

Java 8的一个好模式是使用groupingBy或者还原。

Map<String, List<MyType>> map = Stream.of(arr)
                               .collect(Collectors.groupingBy(mt -> mt.getKey()));

这样做是将所有条目与相同的密钥组合在一起。您可以选择一个适合您比较的钥匙。这会将具有相同键的所有条目组合到一个集合中,然后您只需要匹配具有相同键的条目。此分组可以O(n)

答案 1 :(得分:0)

我认为你的记忆结束了,因为你分配了太大的数组。因此,您可以在读取它们时将值插入HashMap,从而避免重复输入,您可以节省内存。添加到HashMap需要O(1)时间,并在已插入此元素时给出错误。希望这会有所帮助。