合并两个大型字符串数组

时间:2014-11-10 12:36:39

标签: java arrays sorting

我需要将两个大型字符串数组合并为一个,并对它们进行整理。

据我所知,以下是方法:

  1. 循环

  2. 使用数组列表,例如

    List list = new ArrayList(Arrays.asList(a));
    list.addAll(Arrays.asList(b));
    
  3. 在Android中处理字符串是否有任何特定的方式使其比Java库utils更有效?

    任何人都可以建议我采用有效的方法/替代方法。

    注意:数组每个最多可包含8k个元素

1 个答案:

答案 0 :(得分:0)

最好在你的情况下使用数组。此外,它不会占用大量内存,因为你没有应对Strings。

public <T> T[] merge(T[] a, T[] b) {
    int aLen = a.length;
    int bLen = b.length;

    T[] merged = (T[]) Array.newInstance(a.getClass().getComponentType(), aLen + bLen);
    System.arraycopy(a, 0, merged, 0, aLen);
    System.arraycopy(b, 0, merged, aLen, bLen);

    return merged;
}

然后你需要对它进行排序:

String[] mergedArray = merge(a, b);
Arrays.sort(mergedArray);

在这种情况下,合并数组的复杂度为O(n + m),排序的复杂度为(n + m)* log(n + m)。

在列表方法中,如果ArrayList将扩展并从数组转换为集合,则会有一些开销。 用于向列表添加元素的Arrays.asList(a)和O(n)的O(n)。然后O(m)用于Arrays.asList(b)和O(m),用于向列表添加元素,并且还有O(m)用于将列表扩展到需要容量n + m。