我需要将两个大型字符串数组合并为一个,并对它们进行整理。
据我所知,以下是方法:
循环
使用数组列表,例如
List list = new ArrayList(Arrays.asList(a));
list.addAll(Arrays.asList(b));
在Android中处理字符串是否有任何特定的方式使其比Java库utils更有效?
任何人都可以建议我采用有效的方法/替代方法。
注意:数组每个最多可包含8k个元素
答案 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。