list.toArray方法

fuyou001 2011-04-12 09:57:50
ArrayList.toArray()方法最后实现是下面的代码
 public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {
T[] copy = ((Object)newType == (Object)Object[].class)
? (T[]) new Object[newLength]
: (T[]) Array.newInstance(newType.getComponentType(), newLength);
System.arraycopy(original, 0, copy, 0,
Math.min(original.length, newLength));
return copy;
}



public static native void arraycopy


effective java 2 th p 107上提到list.toArray()方法是内部锁定,是线程安全的
而 System.arraycopy是本地方法
为什么说上面的方法是线程安全的,没有看到内部锁定
...全文
571 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
aigoican 2011-04-12
  • 打赏
  • 举报
回复
Connection
TKD03072010 2011-04-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ticmy 的回复:]

返回的数组将是“安全的”,因为此 collection 并不维护对返回数组的任何引用。(换句话说,即使 collection 受到数组的支持,此方法也必须分配一个新的数组)。因此,调用方可以自由地修改返回的数组。

此处的安全不是你所理解的那样,这里的意思就是返回值是一个新的数组,你想怎么操作就怎么操作,不会有人跟你争


如果返回值不是一个新的数组,而与collection 内部可能……
[/Quote]
学习了
龙四 2011-04-12
  • 打赏
  • 举报
回复
返回的数组将是“安全的”,因为此 collection 并不维护对返回数组的任何引用。(换句话说,即使 collection 受到数组的支持,此方法也必须分配一个新的数组)。因此,调用方可以自由地修改返回的数组。

此处的安全不是你所理解的那样,这里的意思就是返回值是一个新的数组,你想怎么操作就怎么操作,不会有人跟你争


如果返回值不是一个新的数组,而与collection 内部可能的数组是同一个,那么collection 有可能修改数组,你的程序也可能对返回的数组进行修改,这样就不安全了

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧