Java 集合類圖

來源:互聯網
上載者:User

 


 


 

有序否

允許元素重複否

Collection

否

是

List

是

是

Set

AbstractSet

否

否

HashSet

TreeSet

是(用二叉樹排序)

Map

AbstractMap

否

使用key-value來映射和儲存資料,Key必須惟一,value可以重複

HashMap

TreeMap

是(用二叉樹排序)

 

4、詳細介紹

常用的類介紹

Collection:父介面; 
Set:介面 ---實作類別: HashSet、LinkedHashSet
List:介面---實作類別: LinkedList,Vector,ArrayList 
SortedSet:介面---實作類別:TreeSet 

Map介面---實作類別:HashMap、Hashtable、LinkedHashMap、Properties

1、List: 
List:有序列表,允許存放重複的元素; 
實作類別: 
ArrayList:數組實現,查詢快,增刪慢,線程不安全,輕量級;
LinkedList:鏈表實現,增刪快,查詢慢 
Vector:數組實現,安全執行緒,重量級 

例:

levit應用中使用集合分布表:

集合類型 應用數量
ArrayList 184處
LinkedList 2處
Vector 0

分析:

從以上的分析結果來看ArrayList是用的最多的,Vector沒有用到(有效能問題,不建議使用)。

下面分析一下應用LinkedList情境的代碼:

private List<Long> getGroupIds(List<GroupMemberDO> groupMemberDOs) {               List<Long> groupIds = new LinkedList<Long>();        if (CollectionUtils.isEmpty(groupMemberDOs)) {            return groupIds;        }               //背景工作調用該方法,此情境資料量很大,外面迴圈的集合類型是ArrayList(查詢快),對查詢出的資料儲存應用LinkedList(增加快)。        for (GroupMemberDO groupMemberDO : groupMemberDOs) {            //此處只做增加操作,上面分析LinkedList是基於鏈表他做增加刪除很快。            groupIds.add(groupMemberDO.getGroupId());        }        return DistinctElementFilter.filterList(groupIds);    }

 在實際開發根據業務情境選擇相應的集合類。
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 進行排序;二叉樹實現的; 

二叉數的定義:

http://www.comp.nus.edu.sg/~xujia/mirror/algorithm.myrice.com/datastructure/basic/binary_tree/chapter1.htm 

 Levit應用目前沒有業務情境就用該集合。

3、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);    }}

4、兩個工具類 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);        }    }

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.