3 回答
TA贡献2012条经验 获得超12个赞
从文档:
buffer()
创建一个新的 big-endian Java 堆缓冲区,其初始容量相当小,可按需无限扩展其容量。
buffer(int initialCapacity)
创建一个新的具有指定容量的 big-endian Java 堆缓冲区,它可以按需无限扩展其容量。新缓冲区的 readerIndex 和 writerIndex 为 0。
所以,buffer(int)
做同样的事情,buffer()
但具有指定的起始容量。如果您知道需要比默认容量更大的容量,它的性能会更好,因为如果容量不足,它就不必继续扩展。编辑:另外,正如@yelliver 所说,您可以通过指定来节省内存,这可能取决于您创建的缓冲区对象的数量(或取决于缓冲区的大小)。
看起来buffer(int)
还设置了一些buffer()
可能不会的索引。
TA贡献1798条经验 获得超7个赞
不同之处在于它们具有不同的初始容量。
请参阅buffer()
文档:
创建一个新的 big-endian Java 堆缓冲区,初始容量相当小,可按需无限扩展其容量。
和buffer(int initialCapacity)
文档:
创建一个具有指定容量的新的 big-endian Java 堆缓冲区,它可以按需无限扩展其容量。
TA贡献1862条经验 获得超7个赞
在一般Java中,很多情况下你可以通过容量或不通过,两者都可以。如果不传容量,则默认容量,容量满时自动扩容。例如:
String[] arr = list.toArray(new String[list.size()]);
//OR
String[] arr = list.toArray(new String[0]);
List<String> list = new ArrayList<>(10);
//OR
List<String> list = new ArrayList<>();
如果让默认容量:
优点:无需关心容量(显然)
缺点:如果您打算使用小于默认容量的小尺寸,则会浪费内存。
如果你通过了你的意图能力:
优点:节省内存,您可以准确分配所需的内存。
缺点:有时您无法从一开始就知道确切的尺寸,或者尺寸的计算很复杂
添加回答
举报