Java – pass a zero size array to save the allocation?

In this code example, from page 107, the last line:

Update[] updates = lu.toArray(new Update[0]);

Contains comments: pass a zero size array and save the allocation

List<Update> lu = new ArrayList<Update>();
String text = "";
final Update.Builder ub = new Update.Builder();
final Author a = new Author("Tallulah");

for (int i=0; i<256; i++) {
  text = text + "X";
  long Now = System.currentTimeMillis();
  lu.add(ub.author(a).updateText(text).createTime(Now).build());
  try {
    Thread.sleep(1);
  } catch (InterruptedException e) {
  }
}

Collections.shuffle(lu);
Update[] updates = lu.toArray(new Update[0]);

What is the distribution savings?

The Javadoc of list #toarray (t [] a) mentions:

This is what I remember: if the array passed to toArray (t [] a) does not fit all the contents of the list, a new array will be allocated Obviously, there are 256 elements in the list, which can't be put into an array of size 0, so a new array must be allocated inside the method, right?

Is this description incorrect? Or what does it mean?

Solution

Yes

You can use

private static final Update NO_UPDATES = { }

 lu.toArray(NO_UPDATES);

However, this will only help if you want the list to be usually 0 in length

Generally speaking, I will use the same method as FGE

lu.toArray(new Update[lu.size()]);

In your specific case, you know the size in advance so that you can do it

Update[] updates = new Update[256];
String text = "";
final Update.Builder ub = new Update.Builder();
final Author a = new Author("Tallulah");

long Now = System.currentTimeMillis();
for (int i=0; i<updates.length; i++) 
  updates[i] = ub.author(a).updateText(text += 'X').createTime(Now++).build();

Collections.shuffle(Arrays.asList(updates));
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>