Java開發中各種集合框架簡介

2021-08-04 08:52:24 字數 2749 閱讀 1064

在大資料mapreduce作業開發中,我們經常會遇到一些大小表的join,這是如果這個小表足夠「小」的話,我們可以使用進行「map-join-side」,這要就可以有效的降低reduce端的壓力,但是在常用的jdk的集合中的map有些許雞肋,因此,各路大神們針對這個問題開發出了不同的集合框架,用以替換原始集合,下面我們具體介紹幾種常用的集合框架:

首先,我們設想了乙個場景——計算不同事業部015、2023年老客,新客-轉化,新客-新增的使用者數量,這三種型別的使用者的定義如下:

老客:前一年和當前年均購買過服百事業部商品

新客-轉化:前一年購買過圖書,當前年購買了服百事業部商品

新客-新增:前一年什麼也沒買,當前年購買了服百事業部商品

因此,根據上述定義,舉例:2023年老客就是根據cust_id(使用者id)在服百分類(fubaiarraylist )和服百總和(fubaiallarraylist )兩個集合檢視2023年和2023年均存在的使用者。2023年新客-轉化就是根據cust_id(使用者id)在圖書(bookarraylist )存在2023年購買記錄,在服百分類(fubaiarraylist )和服百總和(fubaiallarraylist )兩個集合檢視2023年存在的使用者。2023年新客-新增就是根據cust_id(使用者id)在所有使用者(allarraylist )不存在2023年購買記錄,但在服百分類(fubaiarraylist )和服百總和(fubaiallarraylist )兩個集合檢視2023年存在的使用者。

因此,根據上述解釋,我們構造了原始實現**為:

public

static

public

static arraylistbookarraylist = null

;public

static arraylistfubaiallarraylist = null

;public

static arraylistfubaiarraylist = null

;public

static arraylistallarraylist = null

;@override

protected

throws

ioexception, interruptedexception

}fubaiallarraylist = new arraylist();

path fubai_all_path = new path("/personal/zhoujie/recommend/fubaiall.csv");//

14 15年全年購買過服百的全部使用者名單

if(fs.exists(fubai_all_path))

}fubaiarraylist = new arraylist();

path fubai_path = new path("/personal/zhoujie/recommend/fubaiall.csv");//

14 15年全年購買過各服百事業部的全部使用者名單

if(fs.exists(fubai_path))

}allarraylist = new arraylist();

path all_path = new path("/personal/zhoujie/recommend/all_order.csv");//

14 15年全年下單使用者

if(fs.exists(all_path)) }}

@override

protected

throws

ioexception, interruptedexception

else

if(bookarraylist.contains("2014"+tab+cust_id))

else

if(!allarraylist.contains("2014"+tab+cust_id))

}else

else

if(bookarraylist.contains("2014"+tab+cust_id))

else

if(!allarraylist.contains("2014"+tab+cust_id))}}

else

if ("2016".equals(year))

else

if(bookarraylist.contains("2015"+tab+cust_id))

else

if(!allarraylist.contains("2015"+tab+cust_id))

}else

else

if(bookarraylist.contains("2015"+tab+cust_id))

else

if(!allarraylist.contains("2015"+tab+cust_id))}}

}}}

一、jdk集合類

不用說,這個不是我們今天介紹的重點。正是由於原始集合的效率低下才有了這篇文章的存在。即上述**就是jdk集合類的實現**,經過多次測試,作業消耗時間大概在三個小時作業。

二、fastutil集合框架

經過測試,fastutil的集合類替換原始集合的時候,用時兩小時:

bookarraylist = new objectbigarraybiglist()

三、hppc集合框架

經過測試,fastutil的集合類替換原始集合的時候,用時三分鐘:

bookarraylist = new objecthashset()

好快!經過這三個集合類的測試,發現hppc集合框架的查詢效率是最高的。

Java中list集合框架

list裡物件 1.vector 內部是陣列資料結構,是同步的,不用了 2.arraylist 內部是陣列資料結果,是不同步的,替代了vector,查詢快 3.linkedlist 內部是鍊錶資料結構,是不同步的,增刪快 linkedlist link new linkedlist link.add...

Java中set集合框架

set 元素不可以重複,是無序的 set介面中的方法和collection一致 hashset內部資料結構是雜湊表,是不同步的,無序,不重複 hashset hs new hashset hashset hs new linkedhashset 有序 hs.add new person value1...

Java中map集合框架

map 一次新增一對元素,collection一次新增乙個元素 map也稱為雙列集合,collection稱為單列集合 其實map集合中儲存的就是鍵值對。必須保證鍵的唯一性 1.新增 value put key,value 返回前乙個和key關聯的值,如果沒有返回null 2.修改 void cle...