1

我的任务是创建一个算法来解决给定的问题,但也被指示给出关于时间和内存的最佳解决方案。我将得到一个字符串数组。最终,我想在 char[] 中获取数组中所有字符串的所有字符。

我对您的问题(尤其是对那些处理过代码和性能优化的人)是我应该使用List<char>然后手动销毁对象并将内容复制到 char[] 还是手动执行并仅使用数组(我是也不确定该怎么做。)。实例化 List<> 对象的成本是否大于遍历 String[]、将每个字符串转换为 char[] 并将所有 char[] 数组合并在一起的成本?

编辑:

好吧,那我说得更准确一点。将 String[] 的所有字符串转换为 List<> 或任何其他抽象数据结构并使用它或执行以下操作是否更好:遍历 String[],将每个字符串转换为 char[] 并将它们合并char[] 数组在一起?

4

3 回答 3

5

如果您需要 dpulicates 那么实际上您只是将所有字符串附加在一起。在这种情况下,为什么不使用字符串缓冲区。

StringBuilder sb = new StringBuilder();
for (String s : myStringArray){
    sb.append(s);
}
char chars[] = sb.toString().toCharArray();

也可以使用初始容量创建 StringBuilder 以避免动态调整大小的成本。这不会像分配 char[] 和直接插入字符那么快,但对于大多数用途来说应该足够快。作为另一种选择,查看由 char[] 支持的CharBuffer 。

于 2013-05-09T23:02:04.327 回答
1

我假设您真正想做的是连接字符串(即首尾相连)以形成一个字符数组。

这可能是最节省内存的方法:

int size = 0;
for (String s : strings) { size += s.length(); }
char[] result = new char[size];
int i = 0;
for (String s : strings) {
    for (int j = 0; j < s.length(); j++) {
        result[i++] = s.charAt(j);
    }
}

如果您试图最小化内存分配和/或复制,我不建议使用String.toCharArray(), 或StringBuffer/ StringBuilder

于 2013-05-10T08:35:17.397 回答
0

伪代码:

ArrayList<Character> charList = new ArrayList<Character>();
for ( String s : strings ) {
    charList.addAll(s.toCharArray());
}
return charList.toArray(Character.class);

或类似的东西。

于 2013-05-09T22:58:46.177 回答