(原文发表于http://www.ondev.net/post/show/565,转载请注明出处)
关于Java Collection Framework,你可能已经知道如下一些事实
- Vector是线程安全的,ArrayList不是
- ArrayList的读操作比LinkedList快,LinkedList的append操作比ArrayList快
- Set中不可能有两个相等的元素,也就是说,如果e1和e2都在同一个Set中,那么不可能有e1.equals(e2)
- HashMap是线程不安全的,HashTable是线程安全的
但是你可能还不知道或者不了解这些事情:
- LinkedList不是线程安全的
- 不管是在多线程还是单线程的环境下,ArrayList都要比Vector快很多倍
- Set中可以插入null,不过最多只会有一个
- HashMap中可以插入null,HashTable中不行
- TreeSet使用compareTo代替equals判断是否两个元素相等
- HashMap中的元素,无论是keySet还是valueSet,都不一定是按照插入时间先后排序的,HashSet也一样
- 对于非线程安全的类,比如HashMap,ArrayList,TreeSet,可以使用Collections.synchronizedXXX方法(比如synchronizedSet,synchronizedList,synchronizedMap)
- 你可以使用Collections.unmodifiableList来构建出一个不能被修改的List
- 你可以使用Arrays.equals来判断两个数组是否相等
- WeakHashMap使用元素的引用而不是值作为key,也就是说必须在引用相同(a==b)的情况下才能找到相关的值
- 对于WeakHashMap,一旦引用失效,相应的值也就不存在了,比如下面一段代码中:
-
public
class
TestHashMap {
-
-
public
static
WeakHashMap wHmp=
new
WeakHashMap();
-
-
public
static
void
main(String args[]){
-
String s1 =
new
String(
"one"
);
-
wHmp.put(s1,
new
Integer(
1
));
-
addObject(wHmp);
-
Set setHmp= wHmp.keySet();
-
-
for
(Iterator it=setHmp.iterator();it.hasNext();){
-
System.out.println(wHmp.get(it.next()));
-
}
-
-
}
-
-
public
static
void
addObject(WeakHashMap wHmp){
-
-
String s2 =
new
String(
"two"
);
-
String s3 =
new
String(
"three"
);
-
wHmp.put(s2,
new
Integer(
2
));
-
wHmp.put(s3,
new
Integer(
3
));
-
s2=
null
;
-
s3=
null
;
-
System.gc();
-
}
-
}
最后打印出来的结果只有"one”
posted on 2009-04-08 10:28
幻 阅读(604)
评论(0) 编辑 收藏 所属分类:
编程相关