我有一个像下面这样的对象的地图,
<key1, ClassAobj>
<key2, ClassBobj>
<key3, ClassCobj>
<key4, ClassDobj>
地图中的对象数量未知。我正在迭代地调用这些对象的方法。
for key in keyset {
stringbuilder.append(map.get(key).getData())
}
但是在大规模时,这个迭代和stringbuilder.append会导致性能问题,即需要时间。我在考虑创建一个运行时方法来创建一个像
这样的stribuildergetdata() {
return (stringbuilder(map.get(key1).getdata() + map.get(key2).getdata() + map.get(key3).getdata() + ... + till all entries in map ))
}
这是正确的方法吗?如果可以提供示例,请建议是否有更好的方法。
我已经尝试过java反射,它比当前的迭代器版本慢得多,因而避免了它。
P.S。忽略语法,将其视为伪代码。
答案 0 :(得分:0)
StringBuilder
是迄今为止最有效的字符串连接方式,因为你知道发生了什么。
在内部,构建器有一个固定的char数组,在每个附加处存储附加的值。阵列填满后会发生什么?与ArrayList
类似,分配了一个带有arr.length * 2
的新数组,并将值复制到新数组。这个过程会在需要时反复重复。
根据JavaDoc,默认长度为16.如果您知道结果字符串的大致长度,则更好的方法是在构造函数中提供该长度。这将减少之后的额外开销。