A:上面的代碼代碼通過把原有列表傳入一個LinkedHashSet來去除重復的元素。在這個情況里,LinkedHashSet可以保持元素原來的順序。如果這個順序是不需要的話,那么上面的LinkedHashSet可以用HashSet來替換。
Q:Java集合框架都有哪些最佳實踐呢?
A:根據實際的使用情況選擇合適的數據結構,例如固定大小的還是需要增加大小的,有重復元素的還是沒有的,需要保持有序還是不需要,遍歷是正向的還是雙向的,插入是在末尾的還是任意位置的,更多的插入還是更多的讀取,是否需要并行訪問,是否允許修改,元素類型是相同的還是不同的,等等。另外,還需要盡早考慮多線程,原子性,內存使用量以及性能等因素。
不要假設你的集合里元素的數量一直會保持較小,它也有可能隨著時間增長。所以,你的集合最好能夠給定一個合適的大小。
針對接口編程優于針對實現編程。例如,可能在某些情況下,LinkedList是最佳的選擇,但是后來ArrayList可能因為性能的原因變得更加合適
不好的方式:
1
|
ArrayList list = new ArrayList( 100 ); |
好的方式:
1
2
3
4
5
6
|
// program to interface so that the implementation can change List list = new ArrayList( 100 ); List list2 = new LinkedList( 100 ); List emptyList = Collections.emptyList( ); Set emptySet = Collections.emptySet( ); |
在取得列表的時候,如果返回的結果是空的話,最好返回一個長度為0的集合或者數組,而不要返回null。因為,返回null的話可能能會導致程序錯誤。調用你的方法的開發人員可能會忘記對返回為null的情況進行處理。
封裝好集合:一般來說,集合都是不可變的對象。所以盡量不要把集合的成員變量暴露給調用者。因為他們的操作一般都不會進行必要的校驗。
注:這些Java面試題和答案都是從我的書《Core Java Career Essentials》里提取出來的。
原文轉自:http://www.importnew.com/871.html