有序否數組 |
容許元素重複否安全 |
||
Collection框架 |
否ide |
是工具 |
|
List性能 |
是spa |
是線程 |
|
Setcode |
AbstractSetorm |
否 |
否 |
HashSet |
|||
TreeSet |
是(用二叉樹排序) |
||
Map |
AbstractMap |
否 |
使用key-value來映射和存儲數據,Key必須唯一,value能夠重複 |
HashMap |
|||
TreeMap |
是(用二叉樹排序) |
經常使用的類介紹
Collection:父接口;
Set:接口 ---實現類: HashSet、LinkedHashSet
List:接口---實現類: LinkedList,Vector,ArrayList
SortedSet:接口---實現類:TreeSet
Map接口---實現類:HashMap、Hashtable、LinkedHashMap、Properties
一、List:
List:有序列表,容許存放重複的元素;
實現類:
ArrayList:數組實現,查詢快,增刪慢,線程不安全,輕量級;
LinkedList:鏈表實現,增刪快,查詢慢
Vector:數組實現,線程安全,重量級
例:
levit應用中使用集合分佈表:
集合類型 | 應用數量 |
---|---|
ArrayList | 184處 |
LinkedList | 2處 |
Vector | 0 |
分析:
從以上的分析結果來看ArrayList是用的最多的,Vector沒有用到(有性能問題,不建議使用)。
下面分析一下應用LinkedList場景的代碼:
private List<Long> getGroupIds(List<GroupMemberDO> groupMemberDOs) { 在實際開發根據業務場景選擇相應的集合類。
2.Set:
無序集合,不容許存放重複的元素;容許使用null元素
HashSet 的後臺有一個HashMap;初始化後臺容量;只不過生成一個HashSet的話,系統只提供key的訪問; 若是有兩個Key重複,那麼會覆蓋以前的;
實現類 HashSet:equals返回true,hashCode返回相同的整數;哈希表;存儲的數據是無序的。
實現類LinkedHashSet:此實現與 HashSet 的不一樣以外在於,後者維護着一個運行於全部條目的雙重連接列表。存儲的數據是有序的。
哈希表詳解:
http://www.bianceng.cn/Programming/sjjg/200705/1126.htm
例:
levit應用中使用集合分佈表:
集合類型 |
應用數量 |
---|---|
HashSet | 3處 |
LinkedHashSet |
0 |
分析:
從以上的分析結果來看沒有應用到LinkedHashSet,HashSet應用3處下面代碼分析業務場景代碼:
Set<String> identities = new HashSet<String>(); identities.add(VAccountIdentity.TP_ENTERPRISE); identities.add(VAccountIdentity.FREE_PENDING); identities.add(VAccountIdentity.TP_BUYER); 以上代碼不容許元素重複。
不容許集合中有重複的數據能夠選擇HashSet。
子接口SortedSet,對Set排序實現類 :TreeSet:使用元素的天然順序對元素進行排序,或者根據建立 set 時提供的 Comparator 進行排序;二叉樹實現的;
二叉數的定義:
Levit應用目前沒有業務場景就用該集合。
三、Map
HashMap:鍵值對,key不能重複,可是value能夠重複;key的實現就是HashSet;value對應着放;容許null的鍵或值;
Hashtable:線程安全的,不容許null的鍵或值;
Properties::key和value都是String類型,用來讀配置文件;
TreeMap:對key排好序的Map; key 就是TreeSet, value對應每一個key; key要實現Comparable接口或TreeMap有本身的構造器;
LinkedHashMap: 此實現與 HashMap 的不一樣之處在於,後者維護着一個運行於全部條目的雙重連接列表。存儲的數據是有序的。
levit應用中使用集合分佈表:
集合類型 |
應用數量 |
---|---|
HashMap | 142處 |
Hashtable | 0 |
Properties | 0 |
TreeMap | 0 |
LinkedHashMap | 3 |
分析:
從以上的分析結果來看與List的分析結果大體相同,HashMap應用場景最多。
如下分析LinkedHashMap應用場景的代碼:
//此處要保證參數的順序,採用LinkedHashMap. Map<String, String> map = new LinkedHashMap<String, String>(); // 判斷是從 "轉賬、繳存、轉出" 頁面到成功頁面的 map.put(TransferConstants.SC_SUCCESS_U, transferType); map.put("id", b); actionResult.setRedirectURL(getRender(TransferConstants.REDIRECT_SUCCESS, map));
Webx框架中使用Properties讀取配置文件代碼:
/** * 裝載和初始化Webx中的services。<p>該類能夠經過listener或servlet來調用。</p> */public class WebxLoader implements WebxController, WebxConstant { private void configureLog4j(BootstrapResourceLoaderService resourceLoader, Properties props) { //省略部分代碼................. // 若是配置文件名爲*.xml,則使用DOMConfigurator,不然使用PropertyConfigurator。 String filename = log4jConfigurationURL.getFile(); if (filename.endsWith(LOG4J_CONFIGURATION_XML)) { DOMConfigurator.configure(log4jConfigurationURL, props); } else { props = new Properties(props); try { ////關鍵部分,讀取文件到"props"集合中.--------------------------------------------------------------------------------------- props.load(log4jConfigurationURL.openStream()); PropertyConfigurator.configure(props); log.info("Configured log4j from " + log4jConfiguration); } catch (IOException e) { // 此時logging系統還不可用,記錄到servlet log中 logLog("Could not open Log4j configuration file " + log4jConfigurationURL.toExternalForm(), e); } } // 如今能夠開始打log了。 resourceLoader.setLoggerReady(true); } }
四、兩個工具類 Arrays 和 Collections
1.Arrays、此類包含用來操做數組(好比排序和搜索)的各類方法。
2.Collections、主要提供了在 collection 上進行操做的靜態方法(同步集合類方法) 。
Arrays應用實例代碼:
private void setGoodsList(ActionResult actionResult, GoodsDO[] goodsArray) { if (goodsArray != null) { //將數組轉換成集合類 List<GoodsDO> goodsList = Arrays.asList(goodsArray); ///省略代碼...... actionResult.putInContext("goodsList", goodsList); actionResult.putInContext("gev", gev); } }