java – 传递零大小的数组,保存分配?
在此代码示例中,来自第107页的第107页,最后一行:
Update[] updates = lu.toArray(new Update[0]); 包含注释:传递零大小的数组,保存分配 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]); 究竟是什么分配节省了? List#toArray(T[] a)的javadoc提到:
这就是我记得的:如果传递给toArray(T [] a)的数组不能适合列表中的所有内容,则会分配一个新数组.显然,列表中有256个元素,不能放入大小为0的数组中,因此必须在方法内部分配一个新数组,对吧? 这个说明是不正确的?或者它意味着什么呢? 解决方法
是. 您可以使用 private static final Update NO_UPDATES = { } lu.toArray(NO_UPDATES); 但是,如果您希望列表通常为0长度,这将只会有所帮助. 一般来说,我会采用与fge相同的方法 lu.toArray(new Update[lu.size()]); 在您的具体情况下,您事先知道尺寸,这样您就可以做到 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)); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- java – ConcurrentHashMap中String intern方法的重复数据删
- java – 为什么我的项目没有出现在JFrame中?
- 需要具有多个键的Java map / table到一个值.价值通常被改变
- java – 在UML复合结构图中定义“端口”的概念
- 关于多次锁定尝试,使用java.concurrent.ReentrantLock
- Java编程在ICPC快速IO实现源码
- java – 发生“发送测试请求测试”后Quickfix / j的奇怪行为
- java – 如何复制/传递WebDriver的实例,它是否危险?
- Java8 Optional类
- 详解基于java的Socket聊天程序――客户端(附demo)