(原文发表于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 
幻 阅读(638) 
评论(0)  编辑  收藏  所属分类: 
编程相关