Question1:
指定ArrayList的大小有意义吗?我知道我的单子里会有多少个元素,在手边指定大小好吗?还是根本不重要。
List<String> list = new ArrayList<String>(1);
list.add("Hello");
List<String> newList = new ArrayList<String>();
newList.add("Hello");Question2:
当您在迭代同一集合时操作(添加、删除)集合时,就会发生java.util.ConcurrentModificationException。Does that mean there is a thread which is modifying the ArrayList and another Thread iterating the same object.
Question3
有人能告诉我如何锁定名单吗?
发布于 2012-11-10 18:07:41
ArrayList的大小-您指定的是它的初始容量:
List = new ArrayList(10000);System.out.println(list.size());// 0
您仍然需要向其添加项以更改大小--但在它需要执行内部复制之前,您可以将项添加到它的容量范围内。发布于 2012-11-10 18:07:30
unmodifiableCollection中使用java.util.Collections方法。发布于 2012-11-10 18:17:38
Q1:这就是ArrayList的样子
public ArrayList{
private int[] elementData;
private int size;
}在构造ArrayList时,将自动初始化数组的大小。当您用完空间时,大小会自动调整到原来大小的1.5倍。
Q2:你说得对。“例如,通常不允许一个线程修改一个集合,而另一个线程则在它上迭代。一般来说,在这种情况下迭代的结果是没有定义的。一些Iterator实现(包括JRE提供的所有通用集合实现的实现)可能会在检测到此行为时抛出这个异常。这样做的迭代器被称为失败--快速迭代器,因为它们很快地、干净地失败了,而不是在未来的一个未定时间冒着任意的、非决定性的行为的风险。”-java http://docs.oracle.com/javase/1.5.0/docs/api/java/util/ConcurrentModificationException.html文档。
Q3:要锁定您使用的列表
Collections.unmodifiableList(list);这适用于所有集合,并禁止用户更改数据。换句话说,它给用户一个“只读”副本。您可以在这里阅读更多有关集合类的内容。http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html
https://stackoverflow.com/questions/13324654
复制相似问题