全部博文(2065)
分类: Java
2010-05-03 22:48:57
ArrayList模块整理学习
[时间:
List 接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。
笔记:此类实现了List接口
注意,此实现不是同步的。如果多个线程同时访问一个 ArrayList 实例,而其中至少一个线程从结构上修改了列表,那么它必须 保持外部同步。(结构上的修改是指任何添加或删除一个或多个元素的操作,或者显式调整底层数组的大小;仅仅设置元素的值不是结构上的修改。)这一般通过对自然封装该列表的对象进行同步操作来完成。如果不存在这样的对象,则应该使用
方法将该列表“包装”起来。这最好在创建时完成,以防止意外对列表进行不同步的访问:
List list = Collections.synchronizedList(new
ArrayList(...)); //同步加锁用
构造方法摘要 |
|
()
构造一个初始容量为 10 的空列表。 示例:List |
|
( extends > c) |
|
(int initialCapacity)
|
|
方法摘要 |
||
boolean |
( e) |
|
void |
(int index,
element) |
|
boolean |
( extends > c) |
|
boolean |
(int index,
extends > c) |
|
void |
()
|
|
|
()
返回此 ArrayList 实例的浅表副本。 浅拷贝就是指两个对象共同拥有同一个值,一个对象改变了该值,也会影响到另一个对象。深拷贝就是两个对象的值相等,但是互相独立。C++的定义 |
|
boolean |
( o) 如果此列表中包含指定的元素,则返回 true。 |
|
void |
(int minCapacity)
|
|
|
(int index)
|
|
int |
( o) |
|
boolean |
()
|
|
int |
( o) |
|
|
(int index)
|
|
boolean |
( o) |
|
protected void |
(int fromIndex,
int toIndex) |
|
|
(int index,
element) |
|
int |
()
|
|
[] |
()
|
|
|
(T[] a)
|
|
void |
()
|
测试示例
public static void main(String[] args) {
List
if(alist.add(null))
try {
throw new Exception("a");
}
catch (Exception e) {
//
TODO Auto-generated catch block
e.printStackTrace();
}
if(alist.get(0) == null) {
System.out.println("null");
}
}
笔记:果然是可以添加null值进来的。
1.2 分析浅拷贝与深拷贝
浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。
深拷贝:被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。换言之,深复制把要复制的对象所引用的对象都复制了一遍。
PS:假如对象a引用对象b. 所谓浅拷贝就是只拷贝对象a 而对象b是不被复制的。而深拷贝的话是两个都要复制的!
示例:
ArrayList a = new ArrayList();
for (int i = 0; i < 10; i++) {
a.add(i);
}
//浅拷贝
ArrayList b = a;
//深拷贝
ArrayList c = new ArrayList(a);
//深拷贝
ArrayList d = (ArrayList)a.clone();
System.out.println("a:"+a.get(1)+" b:"+b.get(1)+" c:"+c.get(1)+" d:"+d.get(1));
b.set(1, "bbb");
c.set(1, "ccc");
System.out.println("a:"+a.get(1)+" b:"+b.get(1)+" c:"+c.get(1)+" d:"+d.get(1));
输出:
a:1 b:
a:bbb b:bbb c:ccc d:1
哦!我明白了。所谓深拷贝我们完全可以这样来想像。就是两份完全独立的对象了。A与B之间完全是相互独立 的。不会互相受到彼此的影响。而浅拷贝的话变化任何一个对象就会影响到其他的呢!
即它们共用了一个引用对象!
|